我有很多文本要使用PHP插入到MySQL表中。文本的一部分如下例所示:
Yes, this is 'great'!要将其填充到SQL语句中,我需要转义'。
我正在使用ereg-replace $text=mb_ereg_replace("'","\\'", $text);来完成以下工作:
$sql="insert into mytable (msg) values ('".$text."')";现在我发现还有另一种文本样式,我必须将类似这样的内容保存到MySQL:
As you can see the \' world\' is a "disc"!所以我尝试像这样添加更多的mb_ereg_replace:
$text=mb_ereg_replace("'","\\'", $text);
$text=mb_ereg_replace("\\","\\\\", $text);但是这不起作用,我只是得到了错误消息:PHP Warning: mb_ereg_replace(): mbregex compile err: end pattern at escape in [...]
这是什么原因造成的?我可能弄错了,但是找不到!
谢谢你的任何帮助。
发布于 2011-10-14 19:13:37
使用mysql_real_escape_string对字符串进行转义。
$text = mysql_real_escape_string($text);或者更好,使用PDO和参数化查询。
发布于 2015-04-29 19:15:14
有一种更好的方法,你再也不需要担心退出你的字符串了。在mysqli或PDO中使用预准备语句将使大型查询(具有多行的查询)运行得更快,它们是安全的,您不必担心(大多数类型的) SQL注入,而且它们很容易学习。这些字符串将按原样被接受到数据库中,而不会有破坏代码的风险。
下面是一个使用mysqli的示例:
$conn = new mysqli($servername, $username, $password, $dbname);
$stmt = $conn->prepare("INSERT INTO table (columnname) VALUES (?)");
$stmt->bind_param("s", $text);
$stmt->execute();
$stmt->close();基本上,通过在它进入之前绑定参数,它只接受您创建的任何字符串,而不需要转义任何东西。
下面是使用PDO的相同情况。这在本质上做了相同的事情,但优点是既可以处理多种不同的数据库类型(例如Oracle或PostgreSQL),又可以根据关联的类进行一些巧妙的修改。
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("INSERT INTO table (columname)
VALUES (:text)");
$stmt->bindParam(':text', $text);
$stmt->execute();
catch(PDOException $e)
{
echo "Oops, didn't work: " . $e->getMessage();
}
$conn = null;https://stackoverflow.com/questions/7766773
复制相似问题