2013-07-23 32 views
3

有人可以向我解釋爲什麼這不起作用。試圖轉換到準備好的語句按照每個人的意見,但在開始時被卡住的權利... ...的連接是好的,它不返回任何消息,但目前還沒有進入我的表(稱爲nametable)在mysqli編寫的語句不起作用

<?php 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "fidelio"; 
$dbname = "test"; 
$con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 
if(mysqli_connect_errno()) { 
die("Database connection failed: " . 
    mysqli_connect_error() . 
    " (" . mysqli_connect_errno() . ")"); 
    } 

$query = "INSERT INTO nametable (fname, lname) values (?,?)"; 
$stmt = mysqli_prepare($con, $query); 
$firstName = "simon"; 
$lastName = "morris"; 
mysqli_stmt_bind_param($stmt,"ss",$firstname, $lastname); 
mysqli_stmt_execute($stmt); 
printf("Error: %s.\n", $stmt->error); 
$stmt->close(); 
?> 

我添加的最後2行,並且回來是

Error: .

這工作得很好,但準備的語句不....誰知道爲什麼這個錯誤嗎?

$sql="INSERT INTO nametable (fname, lname) 
    VALUES ('$firstName', '$lastName')"; 
    if (!mysqli_query($con,$sql)) 
{ 
    die('Error: ' . mysqli_error($con)); 
} 
+0

您是否嘗試過調試'mysqli_stmt_execute($語句)'來看看是否有相關的錯誤信息來幫助你? –

+0

嘗試'mysqli_stmt_execute($ stmt)或死(mysqli_stmt_error($ stmt))'查看錯誤。 – Barmar

回答

2

試試這個

$dbhost = "localhost"; 
    $dbuser = "root"; 
    $dbpass = "fidelio"; 
    $dbname = "test"; 

    $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

    $firstName = "simon"; 
    $lastName = "morris"; 
      if ($stmtb = $mysqli->prepare("INSERT INTO nametable (fname, lname) values (?,?)")) { 
       $stmtb->bind_param('ss',$firstName, $lastName); 
       $stmtb->execute(); 
      }else {printf("Prepared Statement Error: %s\n", $mysqli->error);} 
+0

嗨回聲,我試過了,它輸入NULL和NULL到兩個領域。請記住,默認值爲NULL。如果我沒有默認值,則錯誤會返回,因爲fname不能爲NULL。非常惱人......看不出爲什麼我的或你的代碼不起作用...... – GhostRider

+0

因爲你在你的數據庫中定義那些列默認爲空或者它們是主鍵,問題出在你的數據庫中。如果你顯示你的解釋,那麼我們可以看到你的表 –

+0

它們都不是主鍵。由於某些我無法解釋的原因,這些值並沒有進入數據庫。這樣做的標準方式正常工作 - 上面的編輯。爲什麼是這樣的...... – GhostRider