我想知道如何从数据库中选择某些行,我需要自动为每一行执行此操作,因此它本身就是这样,但我不能通过ID来实现,是否有某些方法可以解决选择某一行进行更新? 它会是这样的吗? 这当然缺少execute()和连接,但这些部分是我的问题所在
$actual_quote = (empty($_GET['actual_quote'])) ? : $_GET['actual_quote'] ;
$update1 = $db->prepare("UPDATE data SET dislikes = :dislikes WHERE actual_quote = $actual_quote");
和这里; s是数据库的图片
http://i.imgur.com/cqkVgm9.png
那么我将如何选择一行,我将在一个循环中这样做,所以我需要它一次又一次地发生,所以它不能是唯一的,我很困惑,有人可以给一个建议?
答案 0 :(得分:0)
你走在正确的轨道上。
SQL UPDATE
会将一个或多个字段设置为给定值,并且会使用WHERE
语句知道要使用新值更新哪些行。
您的代码看起来不错,但我有一个改进:
$actual_quote = (empty($_GET['actual_quote'])) ? : $_GET['actual_quote'] ;
$update1 = $db->prepare("UPDATE data SET dislikes = :dislikes WHERE actual_quote = :quote");
这不是在SQL本身引用$actual_quote
,而是将其用作参数,就像使用:dislikes
一样。这样你就可以防止一些愚蠢的SQL注入。否则,这看起来很合理。
请注意,如果您对多行有相同的actual_quote
,则所有行都会使用dislikes
的新值进行更新。
附录:您应该能够使用LIMIT 1
以便只更新一行(UPDATE ... LIMIT 1
),但最好的是使用唯一ID(为什么不能使用它)或确保报价是唯一的。
LIMIT 1
并不能很好地解决多个条目中的相同引用"问题,因为它不能保证正确的输入会受到影响;它保证只会改变一行。
tl; dr:修复SQL注入,您的代码应该可以正常工作,但要考虑使用您拥有的唯一ID,或者确保每个条目的引用行都是唯一的。