爲什麼下面的語法在PHP 5.4中運行,但不在PHP 5.2中運行?未知的異常'PDOException'與PHP 5.2上的SQLSTATE [42000]而不是PHP 5.4中的
$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;
我有一個錯誤,這是由於PHP 5.2的兼容性。在PHP 5.4中,這個腳本正常工作。
這link重現相同的錯誤。
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''20'' at line 10' in D:...\ControllerRest.php:56 Stack trace: #0 D:...\ControllerRest.php(56): PDOStatement->execute(Array) #1 D:...\get_data.php(42): ControllerRest->getRestaurantsNearbyResultsAtCount('-20.290190', '-40.293366', '20') #2 {main} thrown in D:...\ControllerRest.php on line 56
是否有任何替代此腳本運行在PHP 5.2?
== UPDATE ==
shivanshu patel's answer did did!但現在錯誤是由以下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));
的可能的複製[如何申請在LIMIT子句bindValue方法?(https://stackoverflow.com/questions/2269840/how-to-apply-bindvalue-method-in-limit-clause) – aynber