基本的な機能を備えたブログを作成していますが、そのうちの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);
}
}
エラーは言う:
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を引用していませんでした。
まず、両方のシナリオでMySQLに送信される文字列のログを追加してください。エラーメッセージによれば、文字列に構文エラーがあります。コードに掘り下げる前に、その特定の要素の解析を開始する方がよいでしょう。 – FDavidov
phpmyadminで同じクエリを実行しましたが、エラーはなく、クエリは完全に実行されました。 – madhuspot
はい、私はあなたの記事からそれを理解しました。それでも、両方のシナリオでロギングを追加して投稿してください。 – FDavidov