2012-06-04 148 views
1

嗨我插入了很多東西到MySQL數據庫。MySQLi插入準備錯誤

但現在我在準備聲明中出現錯誤。我看到數據庫準備錯誤。我究竟做錯了什麼?

這是我的代碼:

$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) 
+0

['$ db-> error'](http://us3.php.net/manual/en/mysqli.error.php)告訴你什麼? – Wiseguy

回答

3

例如toreserved word in mysql,您應該更改您的代碼:

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

謝謝你,這是正確的解決方案。 – JPM

0

To是MySQL中的reserved word。您必須添加反引號周圍:

Contact (IP,`To`,Name,Email 
1

首先要在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(); 

現在檢查,它現在應該工作。