2017-01-01 16 views
0

基本的な機能を備えたブログを作成していますが、そのうちの1つはデータベースに投稿を追加することです。ここで誰も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); 
     } 
    } 

しかし、私はこのフォーム送信時に: enter image description here

を私はこのようなエラーが表示されます。 enter image description here

エラーは言う:

SQL構文にエラーがあります。右の構文はライン1

に「)」 近く使用し、ここで奇妙な部分が来るため があなたのMariaDBサーバのバージョンに対応していることを、マニュアルをご確認ください。

私はifとelse文を除外し、直接場合は外部のクエリを実行し、このような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 
*/ 

     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を引用していませんでした。

+0

まず、両方のシナリオでMySQLに送信される文字列のログを追加してください。エラーメッセージによれば、文字列に構文エラーがあります。コードに掘り下げる前に、その特定の要素の解析を開始する方がよいでしょう。 – FDavidov

+0

phpmyadminで同じクエリを実行しましたが、エラーはなく、クエリは完全に実行されました。 – madhuspot

+1

はい、私はあなたの記事からそれを理解しました。それでも、両方のシナリオでロギングを追加して投稿してください。 – FDavidov

答えて

2

@FDavidovのおかげで、両方のシナリオのログインを開始することができます。

$constant == '' 

私がこれを書いた:$categoryの値を上書きし

$constant ='' 

、したがって、このことにより、リード,があったと私の代わりにこれのif文、中にことがわかりました(余分なカンマ)を使用しているため、構文上のエラーが発生しました。

$constant == ''に修正されました。今はすべてが問題ありません。

関連する問題