0

我有 php 函数的问题:mysql_real_escape_string

我的测试字符串:

    @,&!#$%^*()_+' "\/

我将这些数据添加到 mySql 数据库中,就像这样(简而言之):

    $str = mysql_real_escape_string($str);

    $sql = "INSERT INTO table(company) VALUES('".$str."')";

在 DB 中存储为:

    @,&!#$%^*()_+\' \"\\/

但问题是通过 SELECT 语句查找此数据。

我想找到,名字像的公司

    '"

我的选择:

    SELECT companyFROM tableWHERE companyLIKE '%\' "%';
    选择companytable哪里company喜欢 '%\\' \\"%';
; 不工作。

这有效:

    SELECT `company` FROM `table` WHERE `company` LIKE '%\\\' \\\\"%';

    和

    SELECT `company` FROM `table` WHERE `company` LIKE '%\\\\\\\\' \\\\\\\"%'

但我不知道为什么这样做:(。

我的问题是:

  • 为什么一定要加这么多斜线?

  • 如何在 PHP 中进行正确查询:

    $查询 = '\' "';
    '%'.mysql_real_escape_string($query).'%'
    结果是:'%\'\"%'

    '%'.mysql_real_escape_string(mysql_real_escape_string($query)).'%'
    结果是:'%\\\' \\\"%'

    '%'.mysql_real_escape_string(mysql_real_escape_string(mysql_real_escape_string($query))).'%'
    结果是:'%\\\\\\\' \\\\\\\"%'

只有最后一个效果很好。

4

1 回答 1

0

为什么您使用旧方法,因为 PHP 团队不支持它!

让我们尝试使用 PDO!它会为你做bindvalue

它比旧方法更安全

$db_conn = new PDO('mysql:host=localhost;dbname=mydb',
'user', 'pass');
} catch(PDOException $e){
    echo 'Cannot Connect to the DB!';
}

$sql = 'SELECT name, description
FROM recipes
WHERE chef = :chef';
$stmt = $db_conn->prepare($sql);
$stmt->bindValue(':chef', 'Lorna');
$stmt->execute();

就是这样,没有必要使用mysql_real_escape_string()

让我们试一试

于 2013-10-22T15:51:14.770 回答