PHP:在mySQL中插入引号时出错

时间:2014-10-21 10:15:02

标签: php mysql

我在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”附近使用正确的语法

7 个答案:

答案 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_*函数族。这些功能现已弃用,并带来安全风险(以及其他问题)。

您最好使用PDOPrepared 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 . "' ..."