我正在创建一个包含基本功能的博客,其中一个是在数据库中添加帖子。
以下是我编写的代码,用于在用户点击提交时将数据插入数据库:
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附近保留任何报价。