我有以下代码,它会导致错误:
if(get_magic_quotes_gpc()){
echo 'Magic Quotes enabled... sigh!';
} else {
echo 'Magic Quotes disabled... SWEET';
}
$temp = "Chas' Bone Breaking";
$query = $conn->prepare("UPDATE chasiv_lg_cbbfl.defaults SET name=" . $temp);
$query->execute();
我是PDO使用的新手(老派mysql& mysqli,但试图转换)。
答案 0 :(得分:2)
我们在这里处理字符串,并且需要引用查询中的变量。
旁注:无论是否有撇号,您的查询仍然会出错。
另请参阅以下可能有所帮助:
addslashes()
http://php.net/manual/en/function.addslashes.php striplashes()
http://php.net/manual/en/function.stripcslashes.php 所以改变
SET name=" . $temp)
读为
SET name= '$temp'")
准备好的声明最好在这里使用。请参阅以下
参考文献:
使用相对于用于连接的MySQL API的转义函数来转义数据。
但是,您没有WHERE
条款,而且会更新整个表格。
所以,例如:
SET name= '$temp' WHERE column_to_update = 'x' ")
您需要填写x
并修改列名以适应。
UPDATE参考:
手册中的示例(PDO / INSERT):
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
所以在你的情况下:
try {
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "
UPDATE chasiv_lg_cbbfl.defaults
SET `name` = :temp
WHERE `column_to_update` = :xxx
";
$query = $conn->prepare($sql);
$query->bindValue(":temp", $temp);
$query->bindValue(":xxx", $xxx);
$query = $statement->execute();
$conn = null; // Disconnect
}
catch(PDOException $e) {
echo $e->getMessage();
}