我在将表单$ _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
答案 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 - 它用于将字符串解析为数据库友好的内容。