我已经阅读了所有关于撇号的帖子,但我仍然蒙在鼓里。在这段代码中,我试图删除一个包含撇号和空格的记录。我无法删除它。除非有撇号,否则代码运行良好。我在php/dbo中使用MSSql数据库。我已经从示例代码中删除了密码和用户名。
<?php
$attrs = array(PDO::ATTR_PERSISTENT => true);
$pdo = new PDO("dblib:host=Server;dbname=Aer;charset=utf8", "", "");
$pdo->exec('SET CHARACTER SET utf8');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$TestString="tom's tom";
$TestString = str_replace("'", "''", $TestString) ;
try {
$stmt = $pdo->prepare('DELETE FROM JNO_Clubs WHERE Club = :id');
$stmt->bindValue(':id',$TestString, PDO::PARAM_STR);
$stmt->execute();
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
?>
我试过有没有这条线:
$TestString = str_replace("'", "''", $TestString) ;
如果你能帮忙,我将不胜感激。
我认为您不需要用双撇号替换撇号:
$TestString="tom's tom";
$TestString = str_replace("'", "''", $TestString) ;
try {
$stmt = $pdo->prepare('DELETE FROM JNO_Clubs WHERE Club = :id');
$stmt->bindValue(':id',$TestString, PDO::PARAM_STR);
因为我敢打赌,对bindValue的调用会帮你解决这个问题。该语句的执行很可能将"tom''的tom"作为:id的值传入。尝试删除对str_replace的调用。