选择某行在数据库中更新

时间:2014-07-07 05:57:30

标签: php database

我想知道如何从数据库中选择某些行,我需要自动为每一行执行此操作,因此它本身就是这样,但我不能通过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

那么我将如何选择一行,我将在一个循环中这样做,所以我需要它一次又一次地发生,所以它不能是唯一的,我很困惑,有人可以给一个建议?

1 个答案:

答案 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,或者确保每个条目的引用行都是唯一的。