您的SQL语法错误; 检查对应于你的MySQL服务器版本的使用权语法手册近“”“”)”在第2行(

2019-07-30 00:47发布

我得到一个错误在MySQL:

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 '''')' at line 2'.

HTML代码:

<form action="read_message.php" method="post">
  <table class="form_table">
    <tr>
      <td style="font-weight:bold;">Subject:</td>
      <td><input style=" width:300px" name="form_subject"/></td>
      <td></td>
    </tr>
    <tr>
      <td style="font-weight:bold;">Message:</td>
      <td id="myWordCount">&nbsp;(300 words left)</td>
      <td></td>
    </tr>
    <tr>
      <td><input type="hidden" name="sender_id" value="<?php echo $sender_id?>"></td>
      <td><textarea cols="50" rows="4" name="form_message"></textarea></td>
      <td valign="bottom"><input type="submit" name="submit_message" value="send"></td>
    </tr>
  </table>
</form>

代码插入到一个MySQL表:

<?php
  include_once"connect_to_mysql.php";
  //submit new message
  if($_POST['submit_message']){

    if($_POST['form_subject']==""){
      $submit_subject="(no subject)";
    }else{
      $submit_subject=$_POST['form_subject'];   
    }
    $submit_message=$_POST['form_message'];
    $sender_id = $_POST['sender_id'];
    if($shortMessagesLeft<1){
      $form_error_message='You have left with '.$shortMessagesLeft.' Short Message. Please purchase it from the <a href="membership.php?id='.$id.'">shop</a>.';
    }
    else if($submit_message==""){
      $form_error_message = 'Please fill in the message before sending.';
    }
    else{
      $message_left = $shortMessagesLeft-1;
      $update_short_message = mysql_query("UPDATE message_count SET short_message = '$message_left' WHERE user_id = '$id'");
      $sql = mysql_query("INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) 
        VALUES('$sender_id', '$id', now(),'$submit_subject','$submit_message')") or die (mysql_error());
    }
  }

?>

什么是错误的意思是什么我做错了?

Answer 1:

有一个单引号$submitsubject$submit_message

为什么这是个问题?

单引号字符终止字符串在MySQL和一切都会过去被视为一个SQL命令。 你真的不想写你的SQL这样的。 在最好的情况,你的应用将打破间歇性(如你观察),并在最坏的情况,你刚才已经介绍了一个巨大的安全漏洞。

试想一下,如果有人提出'); DROP TABLE private_messages; '); DROP TABLE private_messages; 在提交信息。

你的SQL命令是:

INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) 
        VALUES('sender_id', 'id', now(),'subjet','');

DROP TABLE private_messages;

相反,你需要正确地清理自己的价值观。

至少你必须贯穿每个值mysql_real_escape_string()但你确实应该使用预处理语句。

如果您正在使用mysql_real_escape_string()你的代码是这样的:

if($_POST['submit_message']){

if($_POST['form_subject']==""){
    $submit_subject="(no subject)";
}else{
    $submit_subject=mysql_real_escape_string($_POST['form_subject']); 
}
$submit_message=mysql_real_escape_string($_POST['form_message']);
$sender_id = mysql_real_escape_string($_POST['sender_id']);

这里是一个伟大的文章,对预处理语句和PDO。



Answer 2:

这就是所谓的SQL注入攻击。 该'试图打开/在你的MySQL查询关闭的字符串。 你应该总是逃脱进入您查询任何字符串。

例如,

而不是这样的:

"VALUES ('$sender_id') "

做这个:

"VALUES ('". mysql_real_escape_string($sender_id)  ."') "

(或等同物,当然)

然而,最好使用PDO,命名参数,预处理语句或许多其他方式自动执行此。 研究这件事,SQL注入( 在这里你有一些技术)。

希望能帮助到你。 干杯



Answer 3:

请确保你已经完全下载sqldump,这个问题是很常见的,当我们尝试导入半/不完整的下载sqldump。 请检查您的sqldump文件的大小。



Answer 4:

我得到了同样的错误,当我用这个代码,以更新的记录:

@mysqli_query($dbc,$query or die()))

取出后or die ,它开始正常工作。



Answer 5:

我以前有这个问题,原因很简单:检查您的变量,如果有字符串,所以把它放在引号“$ your_string_variable_here” ,,如果它是数值保持它不带任何引号。 举例来说,如果我有这些数据:$名称(这将是字符串)$ PHONE_NUMBER(这将是数值)所以,这将是这样的:

$查询= “INSERT INTO usersnamephone )VALUES( '$名',$电话)”; 就这样,这将是固定的^ _ ^



文章来源: 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 '''')' at line 2
标签: php mysql insert