2011-08-31 95 views
1

我有一個使用PHP和MySQLi的腳本和預處理語句。目的是在MySQL服務器上創建一個新用戶,但是準備該語句失敗,並且沒有關於原因的更多信息。使用MySQLi Prepared Statement創建用戶

$query = 'CREATE USER [email protected]`10.1.1.%` IDENTIFIED BY ?;'; 

if ($stmt = $newdb->prepare($query)) { 
$stmt->bind_param('ss', $db_username, $db_password); 

    if ($stmt->execute()) { 
    // Database user created successfully 
    } else { 
    die(errorJSON('db', 'create', 22)); 
} 

$stmt->close(); 
} else { 
    die(errorJSON('db', 'create', 3)); 
} 

任何想法,爲什麼perparing這個聲明會失敗?

謝謝。

+0

請包括錯誤從MySQL - http://php.net/manual/en/mysqli.error.php – ajreal

+0

嗨!你能否給我們提供更多的信息:這個腳本在哪裏失敗?什麼是錯誤類型(PHP或MySQL)?當你在失敗後迴應$ stmt->錯誤時,你會得到什麼? –

+2

我有完全相同的問題,準備聲明失敗,我不知道,爲什麼: mysql> PREPARE stmt1 FROM'CREATE USER? IDENTIFIED BY?'; 錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在''附近使用正確的語法'?識別?'在線1 – Erbureth

回答

1

在測試查詢的成功/失敗時,您應該打印$stmt->error(和可選的$stmt->errno)。例如:

if ($stmt->execute()) { 
     // Database user created successfully 
    } else { 
     errorJSON('db', 'create', 22) 
     die($stmt->error); 
    } 

上面是一個相當糟糕的例子 - 可能我已經搞砸了你的錯誤的報告本身的邏輯 - 但這是你將如何檢索錯誤和打印/記錄它。

+0

這不是問題的答案 – DarkSide

相關問題