PDO在值上与撇号崩溃

时间:2016-03-23 20:36:27

标签: php pdo

我有以下代码,它会导致错误:

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,但试图转换)。

1 个答案:

答案 0 :(得分:2)

我们在这里处理字符串,并且需要引用查询中的变量。

旁注:无论是否有撇号,您的查询仍然会出错。

  • 查阅我在下面进一步准备的准备好的声明示例。

另请参阅以下可能有所帮助:

所以改变

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();
}