1

こんにちは、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)
4

3 に答える 3

3

たとえば、tomysql の予約語です。コードを次のように変更する必要があります。

$sql = "INSERT INTO
            `Contact` (`IP`,`To`,`Name`,`Email`,`Subject`,`Text`)
        VALUES 
            ( ?, ?, ?, ?, ?, ? )
       ";
于 2012-06-04T16:40:55.123 に答える
1

まず To は mysql の予約語であるため、ここで定義されているように引用符を使用して使用する必要があります。

次に、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-04T16:48:38.237 に答える
0

ToはMySQLの予約語です。その周りにバッククォートを追加する必要があります:

Contact (IP,`To`,Name,Email
于 2012-06-04T16:43:44.937 に答える