Php 首先在表中插入并更新经度和纬度
如何首先插入经度和纬度,然后在存在时更新它?我用代码中的查询语句进行了尝试,但我在第28行的C:\xampp\htdocs\bustracker\index.php中得到了这个错误Php 首先在表中插入并更新经度和纬度,php,mysql,Php,Mysql,如何首先插入经度和纬度,然后在存在时更新它?我用代码中的查询语句进行了尝试,但我在第28行的C:\xampp\htdocs\bustracker\index.php中得到了这个错误Parse error:syntax error,意外的“Table”(T_STRING),但是如果删除了插入查询,我会得到输出Table exist <?php $json = '{"latitude":93.86898451,"longitude":40.66561387,"time":"27.04.2015
Parse error:syntax error,意外的“Table”(T_STRING)
,但是如果删除了插入查询,我会得到输出Table exist
<?php
$json = '{"latitude":93.86898451,"longitude":40.66561387,"time":"27.04.2015 20:11:05","route":4}';
$data = json_decode ( $json );
$route = "route_" . $data->{'route'};
$latitude = $data->{'latitude'};
$longitude = $data->{'longitude'};
$recordingTime = $data->{'time'};
require 'connection.php';
// check whether route's table exist.
$results = $con->query ( "SHOW TABLES LIKE'" . $route . "'" ) or die ( mysqli_error () );
if (($results->num_rows) == 1) {
//The error is in this query.
$con->query ( "INSERT INTO ".$route."(latitude, longitude)
VALUES(".$latitude.", ".$longitude.")
ON DUPLICATE KEY UPDATE
latitude = ".$latitude.",
longitude = ".$longitude) or die ( $con->error );
echo "Table exist";
} else {
$con->query ( "CREATE TABLE " . $route . "
(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
latitude FLOAT(10,6) NOT NULL,
longitude FLOAT(10,6) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)" ) or die ( $con->error );
echo "table was craeted";
}
?>
下面是一个示例,说明如何将准备好的语句与绑定占位符一起使用。对于调试动态生成的SQL,将生成的SQL文本分配给一个变量通常会有所帮助,然后可以显示该文本以进行调试
$sql = "INSERT INTO `".$route."`(latitude, longitude, created_at)
VALUES( ? , ? , NOW() )
ON DUPLICATE KEY
UPDATE latitude = VALUES(latitude)
, longitude = VALUES(longitude)";
#var_dump($sql); # for debugging
$stmt = $con->prepare($sql) or die ( $con->error );
$stmt->bind_param("ss",$latitude,$longitude);
$stmt->execute();
$stmt->close();
在这个例子中,我们需要确保$route
是一个有效的标识符;这里有可能通过$route
的值进行SQL注入。(我们无法为标识符提供绑定占位符。)
现在还不清楚insert将如何抛出“复制键”异常;我们看不到哪些列集被定义为主键或唯一键
我们可以使用特殊的values()函数,在更新时引用插入表达式的值列表中的值,如上所示。我们不必在语句中提供“latitude”值的多个副本。您有语法错误longitude=“.$longitude.”)或die($con->error)
在$longitude
Hi@tree之后删除“
”。在IDE中很容易发现PHP语法错误-尝试Eclipse、NetBeans或PHP Storm之类的方法。我已经删除了它,但这行longitude=“.longitude.”中还有另一个错误($con->error)或die($con->error)
您能用代码的最新副本更新问题吗?注意,上面提到的语法错误是PHP错误,不是SQL错误。@tree:仍然有一个伪双引号字符“
。您删除了圆点,但留下了双引号。(Augwa最初的评论指出有两个字符需要删除。)这是一个PHP语法错误,而不是SQL错误。您的代码似乎易受SQL注入攻击。最佳实践是使用绑定占位符准备语句。否则,在将潜在的不安全字符串包含在SQL文本中之前,需要对其进行正确转义。更新时中的表达式可以引用值列表中的值,例如latitude=values(latitude)
。只有一个问题,在我的案例中,我可以将我的纬度列作为唯一键吗?