mysql_real_escape_string和mySql DB中的搜索数据

时间:2013-10-22 15:37:55

标签: php mysql database

我的php函数有问题:mysql_real_escape_string

我的测试字符串:


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

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


    $str = mysql_real_escape_string($str);

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

在DB中存储为:


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

但问题是通过SELECT语句找到这些数据。

我想找,名字就像的公司


    ' "

我的选择:

    SELECT company FROM table WHERE company LIKE '%\' "%';
    SELECT company FROM table WHERE company LIKE '%\\' \\"%';
; 不工作。

这有效:


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

    and

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

但我不知道为什么这项工作:(。

我的问题是:

  • 为什么必须添加这么多斜杠?

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


    $query = '\' "';
    '%'.mysql_real_escape_string($query).'%' 
    result is : '%\' \"%'

    '%'.mysql_real_escape_string(mysql_real_escape_string($query)).'%'
    result is : '%\\\' \\\"%'

    '%'.mysql_real_escape_string(mysql_real_escape_string(mysql_real_escape_string($query))).'%' 
    result is : '%\\\\\\\' \\\\\\\"%'

只有最后一个效果很好。

1 个答案:

答案 0 :(得分: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()

让我们试一试