MySQLi 插入到准备错误中


MySQLi insert into prepare error

嗨,我在 mysql 数据库中插入了很多东西。

但是现在我在准备语句中出现错误。我看到数据库准备错误。我做错了什么?

这是我的代码:

$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)
例如

to是mysql中的保留字,您应该将代码更改为:

$sql = "INSERT INTO
            `Contact` (`IP`,`To`,`Name`,`Email`,`Subject`,`Text`)
        VALUES 
            ( ?, ?, ?, ?, ?, ? )
       ";
首先,

To 是 mysql 中的一个保留字,因此您需要使用此处定义的引号来使用它。

其次,您需要在调用执行方法之前设置变量的值。

$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();

现在检查,它现在应该可以工作了。

To是MySQL中的一个保留字。您必须在其周围添加反引号:

Contact (IP,`To`,Name,Email