gpt4 book ai didi

php PDO 更新语句 : which is safer?

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:46 25 4
gpt4 key购买 nike

我正在学习 PDO,并发现确保我的语句正确工作很棘手。我有一个 PHP 函数,它通过简单地将数字 1 添加到总数来更新我的数据库。

    function add_rating($place_id,$rating_id) {

//make $db accessible inside the function
global $db;

// query v1
$sql = "UPDATE places_ratings SET ? +1 WHERE place_id=?";
$q = $db->prepare($sql);
$q->execute(array($rating_id,$place_id));

}

我尝试了各种变体,但都无法正常工作。我不知道我是否用错了问号。我在关注 this guide还有一个previous SO question .最后,我尝试了一种第一次成功的不同方法,所以我很想重新使用它,因为它看起来也简单得多。

    function add_rating($place_id,$rating_id) {

//make $db accessible inside the function
global $db;

// query v2
$query = "UPDATE places_ratings SET $rating_id = ($rating_id +1) WHERE place_id = $place_id";
$update = $db->query($query);

}

我的问题是:哪种说法更好/更安全?其次,第一个带问号的版本我做错了什么?谢谢...

最佳答案

一般来说,第一个示例中的准备好的语句更安全,因为它们不受 SQL 注入(inject)的影响。

您的示例不起作用,因为您不能在准备好的语句中使用 ? 参数指定字段名称。即使你可以,你的 SQL 仍然是错误的,这将扩展为

 UPDATE places_ratings SET whatever +1 WHERE place_id=?

这是无效的。

如果您的 $rating_id 是在代码中生成的,而不是从用户输入中获取的,您可以将这两种方法结合起来。

关于php PDO 更新语句 : which is safer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016848/

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