我仍在尝试将mysql_ *事物转换为PDO和预处理语句 . 在整个网络上做这件事真的很辛苦,但我没有放弃,我遇到了一些问题 .
我的问题是在一个函数中有多个 mysql_query()
命令 . 所以当我在代码中有这样的东西时:
if (something)
{
mysql_query("UPDATE account SET pass=$pass WHERE id=$id");
mysql_query("UPDATE account_2 SET lock=$lock WHERE id=$id");
mysql_query("UPDATE account_3 SET surname=$surname WHERE id=$id");
}
并希望将其转发给PDO准备好的声明 . 我已经知道我必须做这样的事情:
if (something)
{
$stmt = $db->prepare("UPDATE account SET pass=:pass WHERE id=:id");
$stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
}
我实际上有两个问题:bindValue密码是否可以作为字符串(PDO :: PARAM_STR)?当我添加其他语句时,因为它有更多的查询,我应该像$ stmt2那样命名它们,或者当它被执行时我只能这样做$ stmt吗?
if (something)
{
$stmt = $db->prepare("UPDATE account SET pass=:pass WHERE id=:id");
$stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$stmt = $db->prepare("UPDATE account_2 SET lock=:lock WHERE id=:id");
$stmt->bindValue(':lock', $lock, PDO::PARAM_INT);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
}
或者我应该这样做?
if (something)
{
$stmt = $db->prepare("UPDATE account SET pass=:pass WHERE id=:id");
$stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$stmt2 = $db->prepare("UPDATE account_2 SET lock=:lock WHERE id=:id");
$stmt2->bindValue(':lock', $lock, PDO::PARAM_INT);
$stmt2->bindValue(':id', $id, PDO::PARAM_INT);
$stmt2->execute();
}
还有一个在最后 . 当我在代码函数/检查中这样:
if (mysql_query("INSERT INTO account (id, pass, email, request_time, status) VALUES ('".$id."', '".$pass."', '".$mail."', '".time()."', '".$status."')"))
{
blabla
}
如果执行insert命令,如果首先需要在PDO中,那么如何使用stck和PDO进行suck检查?
最后一个问题......当我已经在PDO中的预准备语句中使用bindValue时,我以后在代码中是否还需要使用is_numeric()函数?
总结:
1)bindValue密码可以作为字符串(PDO :: PARAM_STR)吗?
2)当我添加语句时,因为它有更多的查询,我应该像$ stmt,$ stmt2,$ stmt3或每个语句一样命名它们?
3)当我已经在PDO中的预准备语句中使用bindValue时,我后来在代码中仍然需要使用is_numeric()函数(可能是为了某些与变量作弊)?
谢谢你们
3 回答
是的
你可以将它们命名为
$stmt
因为你赢了't need a different one (once you execute you are done, so you can overwrite if you want to). But What I don' t这就是为什么你不把它全部放在1个陈述而不是3个不同的陈述中?这里真的不明白你的意思吗?如果你需要知道它是否是数字,你将需要is_numeric()是的 .
并且您可以使用
$stmt->execute();
检查它是否已成功执行,因为如果成功则返回true .所以你会这样做
这是一个简单的例子:
为什么不在1个查询中这样做:
您也可以创建一个处理所有更新的函数,然后您只需要传递一个值数组,并且该函数可以在整个脚本中重复使用,为什么在您可以调用单个函数时为每个更新查询重复代码 .