我在mySQL表中插入一个文本变量。一切正常,除非文本是引号。我以为我可以通过使用“mysql_real_escape_string”来防止错误。但无论如何都有错误。
我的插入声明:
$insertimage= "INSERT INTO image(filename,text,timestamp,countdown) VALUES ('$filename','$text','$timestamp','$countdown')";
mysql_real_escape_string($insertimage);
错误讯息: MySQL错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行的“1413885955514”,“10”附近使用正确的语法
答案 0 :(得分:1)
您需要转义要放入SQL的数据,以便其中的任何特殊字符不会破坏SQL。
您正在转义最终SQL字符串中的所有特殊字符;甚至那些你想要有特殊意义的人。
如果您想使用当前的方法,您可以这样做:
$filename = mysql_real_escape_string($filename);
$text = mysql_real_escape_string($text);
$timestamp = mysql_real_escape_string($timestamp);
$countdown = mysql_real_escape_string($countdown);
$insertimage= "INSERT INTO image(filename,text,timestamp,countdown) VALUES ('$filename','$text','$timestamp','$countdown')";
...但PHP mysql_
扩展已过时,您不应该使用它。
现代API(例如mysqli_
和PDO
)支持预处理语句,这是处理用户输入的更好方法。 This answer更详细地介绍了这一点。
答案 1 :(得分:0)
mysql_real_escape_string($insertimage);
在编写查询之前,您必须对每个变量使用此函数。
$filename = mysql_real_escape_string($filename);
$text = mysql_real_escape_string($text);
$timestamp = mysql_real_escape_string($timestamp);
$countdown = mysql_real_escape_string($countdown);
$insertimage= "INSERT INTO image(filename,text,timestamp,countdown) VALUES ('$filename','$text','$timestamp','$countdown')";
答案 2 :(得分:0)
试试这个,
$insertimage = sprintf("INSERT INTO image(filename,text,timestamp,countdown) VALUES ('%s','%s','%s','%s')", mysql_real_escape_string($filename), mysql_real_escape_string($text), $timestamp, $countdown);
为什么,因为您的输入变量必须在sql
中使用之前进行转义然后执行你的sql。
答案 3 :(得分:0)
转义整个查询无用。实际上,现在,您通过这样做会导致语法错误。
您应该转义注入其中的各个变量。
答案 4 :(得分:0)
您当前代码的问题在于您没有正确转义您尝试输入表格的值。
更好的是完全避免使用mysql_*
函数族。这些功能现已弃用,并带来安全风险(以及其他问题)。
您最好使用PDO和Prepared Statements,例如:
$db = new PDO('param1', 'param2', 'param3');
$sql = $db->prepare( 'INSERT INTO `image` (`filename`, `text`, `timestamp`, `countdown`)
VALUES (:filename, :text, :timestamp, :countdown)' );
$sql->execute( array(':filename' => $filename,
':text' => $text,
':timestamp' => $timestamp,
':countdown' => $countdown )
);
答案 5 :(得分:0)
试试这个:
$filename = mysql_real_escape_string($filename);
$text = mysql_real_escape_string($text);
$timestamp = mysql_real_escape_string($timestamp);
$countdown = mysql_real_escape_string($countdown);
$insertimage = "INSERT INTO image(filename,text,timestamp,countdown) VALUES ('$filename','$text','$timestamp','$countdown')";
mysql_query($insertimage);
答案 6 :(得分:0)
像这样concat php变量:
$insertimage= "INSERT INTO image(filename,text,timestamp,countdown) VALUES (" . $filenamec . "," . $text . ", " . $timestamp . ", " . $countdown . ")";
with the respective single quotes in those that are text fields i.e: "... '" . $text . "' ..."