未捕获的异常“PDOException”在PHP5.2上带有“SQLSTATE[42000],但在PHP5.4中没有
为什么下面的语法在PHP5.4中运行,而不是在PHP5.2中运行未捕获的异常“PDOException”在PHP5.2上带有“SQLSTATE[42000],但在PHP5.4中没有,php,php-5.4,php-5.2,Php,Php 5.4,Php 5.2,为什么下面的语法在PHP5.4中运行,而不是在PHP5.2中运行 $stmt = $this->pdo->prepare('SELECT *, COALESCE(( 6371 * acos( cos( radians(:lat_params) ) * cos( radians( tbl_restaurants_restaurants.lat ) ) * cos( radians( tbl_restaurant
$stmt = $this->pdo->prepare('SELECT *, COALESCE(( 6371 * acos( cos( radians(:lat_params) ) *
cos( radians( tbl_restaurants_restaurants.lat ) ) *
cos( radians( tbl_restaurants_restaurants.lon ) - radians(:lon_params) ) +
sin( radians(:lat_params1) ) *
sin( radians( tbl_restaurants_restaurants.lat ) ) ) ), 0) AS
distance FROM
tbl_restaurants_restaurants WHERE tbl_restaurants_restaurants.is_deleted = 0
ORDER BY distance ASC LIMIT 0, :max');
$stmt->execute( array('lat_params' => $lat, 'lon_params' => $lon, 'lat_params1' => $lat, 'max' => $max ));
return $stmt;
我有一个错误,这应该是由于PHP5.2的兼容性。在PHP5.4中,此脚本正常工作
这就产生了同样的错误
致命错误:未捕获的异常“PDOException”带有消息
'SQLSTATE[42000]:
语法错误或访问冲突:1064您的SQL语法有错误;
查看与您的MySQL服务器版本对应的手册,以了解可在20附近使用的正确语法
在D:…\controllerest.php:56中的第10行
堆栈跟踪:0 D:…\ControllerRest.php56:
PDOStatement->executeArray 1d:…\get_data.php42:
ControllerRest->getRestaurantsNearbyResultsAtCount'-20.290190','-40.293366',20'
在第56行的D:…\ControllerRest.php中抛出2{main}
除了在PHP5.2上运行的脚本,还有其他选择吗
==更新==
shivanshu patel的回答确实有效!但现在该错误由以下SQL语句生成:
$stmt = $this->pdo->prepare("SELECT COALESCE(( 6371 * acos( cos( radians(:lat_params) ) * cos( radians( 'tbl_restaurants_restaurants'.'lat' ) ) * cos( radians( 'tbl_restaurants_restaurants'.'lon' ) - radians(:lon_params) ) + sin( radians(:lat_params1) ) * sin( radians( 'tbl_restaurants_restaurants'.'lat' ) ) ) ), 0) AS distance FROM 'tbl_restaurants_restaurants' ORDER BY distance DESC LIMIT 0, :default_to_find_distance");
$stmt->execute( array('lat_params' => $lat, 'lon_params' => $lon, 'lat_params1' => $lat, 'default_to_find_distance' => $default_to_find_distance) );
尝试用``覆盖列和表,并确保max为int
<?php
$stmt = $this->pdo->prepare('SELECT *, COALESCE(( 6371 * acos( cos( radians(:lat_params) ) *
cos( radians( `tbl_restaurants_restaurants`.`lat` ) ) *
cos( radians( `tbl_restaurants_restaurants`.`lon` ) - radians(:lon_params) ) +
sin( radians(:lat_params1) ) *
sin( radians( `tbl_restaurants_restaurants`.`lat` ) ) ) ), 0) AS
distance FROM
`tbl_restaurants_restaurants` WHERE `tbl_restaurants_restaurants`.`is_deleted` = 0
ORDER BY distance ASC LIMIT 0, :max');
$stmt->bindValue(':max', $max, PDO::PARAM_INT);
$stmt->execute( array('lat_params' => $lat, 'lon_params' => $lon, 'lat_params1' => $lat ));
return $stmt;
可能重复的