1

我需要替换我的 mysql 数据库中的单引号,并且我使用脚本来执行此操作。它适用于其他字符,但当涉及单引号时,它根本不起作用。

$sql[$handle]['sql'] = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search[$i].'\',\''.$replace[$i].'\')'

尝试替换单引号时出现此错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '''','')' 附近使用正确的语法)

这是我用来搜索报价的字符串:$search[] = ('\'');

4

2 回答 2

2

您需要转义您的$search,因为您传递的是单引号 - 所以当它转到 MySQL 时,它看起来像这样:'''. 添加这个:

$search[$i] = addslashes($search[$i]);

最好使用准备语句来避免转义和 SQL 注入问题。

于 2012-09-15T16:28:56.557 回答
0

使用准备好的语句?占位符。此示例使用PEAR DB 包

<?php
    // import the PEAR DB module
    require_once("DB.php");

    // connect
    $dsn = "mysqli://tehUserName:tehPassWord@db.example.com/tehDatabase";
    $conn = DB::connect($dsn);

    // note the question marks, `?`, used for the string values
    $statement = 'UPDATE '.$table.' SET '.$field.' = REPLACE(?, ?, ?)';
    $result = $conn->query ($statement, [ $field, $search[$i], $replace[$i] ]);

    // ...

我认为 PEAR DB 包已被取代——我已经有一段时间没有编写 PHP 代码了——但是这个片段演示了准备好的语句和占位符。

如果不使用 PEAR DB 包,您应该仍然可以使用准备好的语句和占位符,但我不确定。(如果有人想编辑这个问题......)请参阅php.net 上的 Prepared Statements 文章

于 2012-09-15T16:47:52.020 回答