我的代码中有很多SQL语句,我正在尝试转换为PDO,因为我刚刚了解它并喜欢它。
我的问题是,您是否可以更新Prepared语句中的1个或2个字段,或者它不能像那样工作。
我有桌子,当用户浏览我的网站时,某些字段会更新,例如" lastlogin"或者"我的地址"等等,但所有存储在一个"用户"有24+列的表。
是否可以使用1个PDO语句单独更新这些字段,或者是否必须为我想要更新的每个变体编写新的PDO语句。就像我想更新城市和州一样,我必须有一个单独的PDO。或者,如果我想做地址和邮政编码,另外一个,等等
我试图决定是否仅仅使用准备好的语句是值得的(因为我必须为50列表行写1000个变体)或者我是否应该只使用预准备语句条目,只是按照其他方式(见此处)进行,并根据需要进行消毒。
$sql = "DELETE FROM addresses WHERE usernumber = '$usernumber' and number = '$add_to_del'";
$result = mysqli_query($conn,$sql);
答案 0 :(得分:0)
答案是:是的。
PDO就像mysql_一个抽象层,但是效果要好得多。
要在PDO中重写示例查询,您可以执行以下操作:
$sql = 'DELETE FROM addresses WHERE usernumber = :usernumber and number = :add_to_del';
$sth = $db->prepare($sql);
$sth->execute(array(':usernumber' => $usernumber, ':add_to_del' => $add_to_del));
我认为你误解了PDO是什么。 PDO就像mysql_一个抽象层,但更安全(因为预处理语句),并且具有比旧的depreceated mysql_库更多的功能。
强烈建议您重构代码以使用类似PDO或MySQLi的代码。 不推荐使用mysql_(mysql_query等),这意味着PHP不再支持它,并且在将来的版本中将被删除(如果还没有)。
答案 1 :(得分:0)
我理解你的问题:
我是否可以仅使用一个语句执行查询:
UPDATE my_table SET a=1
和UPDATE my_table SET b=2
答案是NO。准备好的陈述不会解决您的问题。您可以做的是撰写完整更新SQL语句并使用不同的值运行它(同一个),为未修改的字段传递现有值。
例如,你有一张桌子:
|a|b|c|d|e|
-----------
|1|1|1|1|1|
|2|2|2|2|2|
|3|3|3|3|3|
您希望第一行更新a = 5,第二行更新c = 7,最后更新e = 9。所以准备好的语句看起来像(匿名参数):
UPDATE my_table SET a=?, b=?, c=?, d=?, e=? WHERE a=?
你用数据解雇它:
array(5,1,1,1,1,1)
array(2,2,7,2,2,2)
array(3,3,3,3,9,3)