我仍在尝试将 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();
}
我实际上有两个问题:是否可以将密码绑定为字符串 (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
}
如果插入命令首先需要在 PDO 中存在,如何在 stmt 和 PDO 中使用吸盘检查?
最后一个问题......当我已经在 PDO 的准备好的语句中绑定值时,我以后在代码中是否还需要使用 is_numeric() 函数?
所以总结:
1) 可以将密码绑定为字符串 (PDO::PARAM_STR) 吗?
2) 当我添加语句时,因为它有更多查询,我应该将它们命名为不同的名称,如 $stmt、$stmt2、$stmt3 还是每个语句都相同?
3)当我已经在 PDO 中的准备好的语句中绑定值时,我以后在代码中是否仍然需要使用 is_numeric() 函数(可能是为了对变量作弊)?
谢谢你们