嗨,我在mysql数据库中插入了很多东西。
但是现在我在prepare语句中得到一个错误。我看到数据库准备错误。我做错了什么?
这是我的代码:
$sql = "INSERT INTO
Contact (IP,To,Name,Email,Subject,Text)
VALUES
( ?, ?, ?, ?, ?, ? )
";
if (!$stmt = $db->prepare($sql)) {
echo 'Database prepare error';
exit;
}
$stmt->bind_param('ssssss', $ip_contact, $to_contact, $name_contact, $email_contact, $subject_contact, $text_contact);
if (!$stmt->execute()) {
echo 'Database execute error';
exit;
}
$stmt->close();我的SQL表如下所示:
Contact:
- ID int(11) auto_increment primary key
- IP varchar(15)
- To varchar(5)
- Name varchar(20)
- Email varchar(20)
- Subject varchar(20)
- Text varchar(600)发布于 2012-06-05 00:40:55
例如,to是一个reserved word in mysql,您应该将您的代码更改为:
$sql = "INSERT INTO
`Contact` (`IP`,`To`,`Name`,`Email`,`Subject`,`Text`)
VALUES
( ?, ?, ?, ?, ?, ? )
";发布于 2012-06-05 00:48:38
首先,To在mysql中是一个保留字,所以你需要按照here的定义使用引号。
其次,在调用execute方法之前,需要设置变量的值。
$sql = "INSERT INTO
Contact (IP,'To',Name,Email,Subject,Text)
VALUES
( ?, ?, ?, ?, ?, ? )
";
if (!$stmt = $db->prepare($sql)) {
echo 'Database prepare error';
exit;
}
$stmt->bind_param('ssssss', $ip_contact, $to_contact, $name_contact, $email_contact, $subject_contact, $text_contact);
$ip_contact = '123456';
$to_contact = '123456';
$name_contact = '12345';
$email_contact = '1111';
$subject_contact = 'test';
$text_contact = 'test';
if (!$stmt->execute()) {
echo 'Database execute error';
exit;
}
$stmt->close();现在检查一下,它现在应该可以工作了。
发布于 2012-06-05 00:43:45
To是MySQL中的reserved word。您必须在其两边添加反引号:
Contact (IP,`To`,Name,Emailhttps://stackoverflow.com/questions/10884820
复制相似问题