gpt4 book ai didi

php - 在 MySQL 更新查询期间将 php 脚本更改为 PDO 导致语法错误

转载 作者:行者123 更新时间:2023-11-29 02:27:54 25 4
gpt4 key购买 nike

我有一个 PHP 脚本来更新 MySQL 表中的详细信息。一切正常,但现在我已将数据库连接方法更改为 PDO:

$pdo = new PDO('mysql:host=localhost;dbname=****', '****', '*****');

我对脚本进行了各种更改以适应这一点,因此它可以继续工作,唯一失败的地方是在 mysql 表更新后的最后。我收到此错误:

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 'and park_id=31' at line 1' in /home3/danville/public_html/test2/index.php:29 Stack trace: #0 /home3/danville/public_html/test2/index.php(29): PDO->query('update tpf_ride...') #1 {main} thrown in /home3/danville/public_html/test2/index.php on line 29

这是导致错误的代码片段:

$query = "update tpf_rides set name='$name',type='$type'";
if($topride!=""){$query .= ",top_ride=$topride";}
if($info!=""){$query .= ",info='$info'";}
if($height!=""){$query .= ",height=$height";}
if($length!=""){$query .= ",length=$length";}
if($speed!=""){$query .= ",speed=$speed";}
if($inversions!=""){$query .= ",inversions=$inversions";}
$query .= " where ride_id=".$ride_id." and park_id=".$park_id;
$pdo->query($query);
}

第 29 行是在 Notepad++ $pdo->query($query); 上,尽管错误消息似乎引用了 $query .= "where ride_id=". $ride_id."和 park_id=".$park_id;

有什么我需要更改以阻止错误的想法吗?其他详细信息 - 我使用 require_once 连接到数据库。尽管有错误,更新确实生效了。

最佳答案

如果您打算切换到 PDO,您不妨利用准备好的语句和参数绑定(bind)。它实际上使您的查询比 SQL 注入(inject)更安全并且还使您的代码更具可读性。您的查询生成器 方法确实使事情变得有点复杂,但它仍然是可能的。我还强烈建议在开发期间启用错误报告。例如

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$upd = array('name = :name', 'type = :type');
$values = array(
'name' => $name,
'type' => $type,
'ride_id' => $ride_id,
'park_id' => $park_id
);

if (!empty($topride)) {
$upd[] = 'top_ride = :topride'; // :topride is the named parameter placeholder
$values['topride'] = $topride; // the array key matches the named placeholder above
}
if (!empty($info)) {
$upd[] = 'info = :info';
$values['info'] = $info;
}
// and so on

$query = sprintf('UPDATE tpf_rides SET %s WHERE ride_id = :ride_id AND park_id = :park_id',
implode(', ', $upd));
$stmt = $pdo->prepare($query);
$stmt->execute($values);

关于php - 在 MySQL 更新查询期间将 php 脚本更改为 PDO 导致语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com