引号和mysql插入麻烦

时间:2011-04-14 14:50:16

标签: php mysql http-post mysql-error-1064

我在将表单$ _POST变量插入MySQL时遇到问题! 我知道这是一个单引号问题,但根本无法解决它。

代码是:

$naziv_db = $_POST["naziv"];
$naziv_db = mysql_real_escape_string($naziv_db);

$query = "INSERT INTO items (title) VALUES ('$naziv_db')";

$stmt = mysql_query($query) or die("MySQL error: " . mysql_error());

如果我输入的值包含",则会正确插入,但如果它包含',则会显示错误!

例如,如果我的输入是Milky's

error is: MySQL error: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 's

如果我的输入是"Milkys",一切顺利......


我是新来的,所以无法回答我自己的问题所以我必须编辑!

克里斯蒂安的解决方案是正确的解决方案!

我更改了代码:

$query = "INSERT INTO items (title) VALUES ('$naziv_db')";

为:

$query = 'INSERT INTO `items` (`title`) VALUES ("'.$naziv_db.'")';

现在它同时接受“和”而没有错误!

谢谢你们,你们是最好的:D

3 个答案:

答案 0 :(得分:2)

为了完全避免这种情况,你最好使用准备好的声明。

this question的答案中有一个很好的例子。

根据您的情况转换,您得到:

$db = new mysqli("host","user","pw","database");
$stmt = $db->prepare("INSERT INTO items (title) VALUES (?)");
$stmt->bind_param('s', $_POST["naziv"]);
$stmt->execute();
$stmt->close();

答案 1 :(得分:2)

从你的代码中得到这样的错误是不可能的 很可能在其中的某个地方存在拼写错误 可能是你正在逃避错误的变量,或者是另一个产生此错误的查询

您确定发布了实际运行的代码吗?它是精确的代码还是一些草图?

将mysql_query字符串更改为此

mysql_query($query) or trigger_error(mysql_error()." ".$sql);

请粘贴它的输出。

或甚至更改整个代码:

ini_set('display_errors',1);
error_reporting(E_ALL);

$naziv_db = $_POST["naziv"];
$naziv_db = mysql_real_escape_string($naziv_db);
$query = "INSERT INTO items (title) VALUES ('$naziv_db')";

var_dump($_POST["naziv"]);
echo "<br>\n";
var_dump($naziv_db);
echo "<br>\n";
var_dump($query);
echo "<br>\n";

mysql_query($query) or trigger_error(mysql_error()." ".$sql);

这称为“调试”,通常有帮助。

答案 2 :(得分:-4)

尝试addslashes - 它用于将字符串解析为数据库友好的内容。