Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql错误。sql查询语法错误_Php_Mysql - Fatal编程技术网

Php Mysql错误。sql查询语法错误

Php Mysql错误。sql查询语法错误,php,mysql,Php,Mysql,下面的代码给出了一个错误。仅查询就可以直接在phpmyadmin上正常工作,但在我的php代码中: 数据库错误您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第行“\'to\”、“\'message\”、“\'from\”)附近使用的正确语法。。 但我不明白为什么 <?php $con = mysqli_connect("localhost","","",""); if (!$con) { echo" Not connected to database";

下面的代码给出了一个错误。仅查询就可以直接在phpmyadmin上正常工作,但在我的php代码中:

数据库错误您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第行“\'to\”、“\'message\”、“\'from\”)附近使用的正确语法。。 但我不明白为什么

<?php
$con = mysqli_connect("localhost","","","");
if (!$con)
  {
     echo" Not connected to database";
  die('Could not connect: ' . mysqli_error());
  }
if(isset($_POST['submit'])){
$username=$_SESSION["username"];
$sql = "INSERT INTO `dbase.mail`(`Date`, `to`, `message`, `from`) VALUES (CURDATE(),\'$_POST[username1]\',\'$_POST[message]\',\'$username\')";
$xy=mysqli_query($con,$sql);
if (!$xy)
  {
  die('Database Error ' . mysqli_error($con));
  }
echo "Your message is stored";


} 
有几个问题:

  • 必须分别分隔数据库名称和表

    INSERT INTO `dbase`.`mail` -- RIGHT
    
    不是这个:

    INSERT INTO `dbase.mail` -- WRONG
    
    $string = "that\'s the way"; -- WRONG
    
    INSERT INTO 'dbase.mail'('Date', 'to', 'message', 'from') -- WRONG
    
  • 您不需要在双引号字符串中反斜杠单引号

    $string = "that's the way"; -- RIGHT
    
    不是这个:

    INSERT INTO `dbase.mail` -- WRONG
    
    $string = "that\'s the way"; -- WRONG
    
    INSERT INTO 'dbase.mail'('Date', 'to', 'message', 'from') -- WRONG
    
  • 错误消息表明您正在使用单引号来分隔列,而不是反引号

    INSERT INTO `dbase`.`mail`(`Date`, `to`, `message`, `from`) -- RIGHT
    
    不是这个:

    INSERT INTO `dbase.mail` -- WRONG
    
    $string = "that\'s the way"; -- WRONG
    
    INSERT INTO 'dbase.mail'('Date', 'to', 'message', 'from') -- WRONG
    
  • 不能将$\u POST变量直接插入SQL!这将允许黑客轻松攻击您的网站。看到和

    这不是您在这个问题中所问的错误的来源,但这是一种安全实践,您必须在将代码放到internet上之前学习如何正确处理。如果你是一名电工,这类似于防止火灾的安全接线


var\u dump($sql)
以显示
INSERT
-语句的外观。可能有一个
$\u POST
变量与预期不符。顺便说一句,不要像这样使用
$\u POST
,在查询中使用它们之前一定要对其进行清理。请尝试“插入邮件值(CURDATE(),\\'$\u POST[username1]\',\\'$\u POST[message]\',\\'$username\'”;或者告诉我你想插入什么值…我使用了上面的值,但仍然显示错误。在使用vardump()时警告:mysql\u fetch\u assoc():提供的参数在xxx中不是有效的mysql结果资源。php bool(false)数据库错误您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第1行“\'dkand\”、“'smdald\”、“'username\”)附近使用的正确语法,我觉得我必须指出: