我已经阅读了所有关于撇号的帖子,而且我还在黑暗中。在此代码中,我试图删除包含撇号和空格的记录。我无法删除它。除非有撇号,否则代码工作正常。我在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) ;
如果你能帮助我,我将非常感激。
答案 0 :(得分:1)
我认为你不需要用双撇号替换撇号:
$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会为你处理这个问题。该声明的执行很可能正在通过&#34; tom&#39;&#39;&#39;&#39;&#39;&#39; in作为值:id。尝试删除对str_replace的调用。