PDO更新不同数量的字段,相同的语句

时间:2015-10-19 21:56:25

标签: php pdo

我的代码中有很多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);

2 个答案:

答案 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=1UPDATE 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)