我正在尝试使用PDO来避免sql注入,并一直在寻找和搜索示例,这就是我想出来的,但某处有某种错误。数据库没有得到更新,我得到和SQL错误,但它不会打印详细信息。
elseif (isset($_POST["bilnr"])) {
$name = $_POST['name']; $mobil = $_POST['mobil']; $bilnr = $_POST['bilnr']; $regnr = $_POST['regnr']; $userid = $_COOKIE[userid]; $username = $_COOKIE[user];
$sql=$oDB->Prepare("UPDATE members SET name=:name, mobil=:mobil, bilnr=:bilnr, regnr=:regnr WHERE id=:userid AND username=:username");
$sql->execute(array(':userid' => $userid);
if (!$sql) {
echo "\nPDO::errorInfo():\n";
print_r($oDB->errorInfo());
}
echo "<p class=\"red\">Informasjonen er oppdatert!</p>";
mysqli_close($con); }
如果或当我删除mysqli_close字符串时,某些内容会崩溃并且页面只会变为空白而没有错误。另外,使用上面的代码,表单中的更新不会进入数据库。
和PDO连接在一个单独的文件中包含
$oDB=new PDO("mysql:host=$host;dbname=$db_name", $username, $password);
这是更新后的代码
elseif (isset($_POST["bilnr"])) {
$name = $_POST['name']; $mobil = $_POST['mobil']; $bilnr = $_POST['bilnr']; $regnr = $_POST['regnr']; $userid = $_COOKIE[userid]; $username = $_COOKIE[user];
$sql=$oDB->Prepare("UPDATE members SET name=:name, mobil=:mobil, bilnr=:bilnr, regnr=:regnr WHERE id=:userid AND username=:username");
$sql->execute(array(':userid' => $userid,
':name' => $name,
':mobile' => $mobile,
':bilnr' => $billnr,
':regnr' => $regnr,
':username' => $username));
if (!$sql) {
echo "\nPDO::errorInfo():\n";
print_r($oDB->errorInfo());
}
echo "<p class=\"red\">Update Done!</p>";
mysqli_close($con); }
下一个问题是将值输入数据库,因为现在我没有收到任何错误,所以我不确定是什么错误。
更新
它有效,只是数组变量中的一些错字:)
答案 0 :(得分:0)
mysqli_query
的第一个参数必须是一个字符串(表示SQL查询),但是您正在向它传递一个PDO准备好的查询。
不要混合和匹配多个数据库库。
使用PDO
或 mysqli_
。
答案 1 :(得分:0)
首先,您无法混合mysqli
和PDO
。其次,您的查询问题在于您有6个占位符,但在致电execute()
时,您只需填写其中一个占位符。它应该是:
$sql->execute(array(':userid' => $userid,
':name' => $name,
':mobile' => $mobile,
':bilnr' => $billnr,
':regnr' => $regnr,
':username' => $username));
答案 2 :(得分:-1)
你不再需要mysqli_ *函数,废弃它们(仅当你使用PDO时):)当你使用PDO时,mysql_ *和mysqli_ *在组合时不起作用。我建议你再使用PDO而不是mysql函数。 PDO现已成熟,是首选方式。
$sql = "
INSERT INTO table (name)
VALUES (:name)
";
//Here you prepare the SQL (you already did that correctly).
$stmt = $db->prepare($sql);
//You can choose to use bindParam, bindValue or include it in the array (as you do it).
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$name = 'John';
$stmt->execute();
这是示例如何使用PDO将内容插入MySQL数据库。