我的php函数有问题:mysql_real_escape_string
我的测试字符串:
@,&!#$%^*()_+' "\/
我将这些数据添加到mySql数据库,就像那样(简而言之):
$str = mysql_real_escape_string($str); $sql = "INSERT INTO table(company) VALUES('".$str. "')";
在DB中存储为:
@,&!#$%^*()_+\' \"\\/
但问题是通过SELECT语句找到这些数据。
我想找,名字就像的公司
' "
我的选择:
SELECT; 不工作。company
FROMtable
WHEREcompany
LIKE '%\' "%'; SELECTcompany
FROMtable
WHEREcompany
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 : '%\\\\\\\' \\\\\\\"%'
只有最后一个效果很好。
答案 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()
让我们试一试