任何人都可以解释MariaDB这种奇怪的行为吗?

时间:2017-01-01 08:34:49

标签: php mysql sql mariadb

我正在创建一个包含基本功能的博客,其中一个是在数据库中添加帖子。

以下是我编写的代码,用于在用户点击提交时将数据插入数据库:

if(isset($_POST['submit'])){

      //Assign the variables
      $title = mysqli_real_escape_string($db->link, $_POST['title']);
      $category = mysqli_real_escape_string($db->link, $_POST['category']);
      $body = mysqli_real_escape_string($db->link, $_POST['body']);
      $author = mysqli_real_escape_string($db->link, $_POST['author']);
      $tags = mysqli_real_escape_string($db->link, $_POST['tags']);

      // //Simlpe Validation
      if($title == '' || $category='' ||$body == '' || $author == ''){
        //Set Error
        $error = 'Please fill out all the required fields.';
      } 
      else{
      $query = "insert into posts (title, body, author, tags, category) values ('$title','$body', '$author', '$tags',$category)";

        $insert_row = $db->insert($query);
      }
    }

错误说:

  

您的SQL语法有错误;检查手册   对应于您的MariaDB服务器版本,以获得正确的语法   靠近')'在第1行

这是奇怪的部分。

当我排除if和else语句并直接在if和else语句之外运行查询时:

  $query = "insert into posts (title, body, author, tags, category) values ('$title','$body', '$author', '$tags',$category)";

  $insert_row = $db->insert($query);

  // Simlpe Validation
  // if($title == '' || $category='' ||$body == '' || $author == ''){
  //   //Set Error
  //   $error = 'Please fill out all the required fields.';
  // } 
  // else{

  // }

但是使用上面的代码,查询运行得很好,数据库也会更新。

任何人都能解释一下吗?

我很难理解为什么会这样做。

顺便说一下,这是Database类中insert的方法:

/*
*   Insert
*/

        public function insert($query){

            $insert_row = $this->link->query($query) or die($this->link->error);

            //Validate insert
            if($insert_row){
                header("Location: index.php?msg=".urlencode('Record Added'));
                exit();
            }
            else{
                die('Error: ('.$this->link->errno.') '.$this->link->error);
            }
        }

修改: 有些人问及类别'。好吧,$ _POST [' category']是一个整数,posts表的列类别显然也是一个整数。这就是为什么我在查询中没有在$ category附近保留任何报价。

1 个答案:

答案 0 :(得分:2)

感谢@FDavidov建议我开始登录两个场景。我发现在if语句中,而不是:

$constant == ''

我写了这个:

$constant =''

其中覆盖了$category的值,因此查询中有一个前导,(额外的逗号),导致语法错误。

我将其更正回$constant == ''。现在一切都很好。