PHP-PDO-MSSQL和带撇号的删除


PHP - PDO - MSSQL and Deleting with apostrophes

我已经阅读了所有关于撇号的帖子,但我仍然蒙在鼓里。在这段代码中,我试图删除一个包含撇号和空格的记录。我无法删除它。除非有撇号,否则代码运行良好。我在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的调用。