2013-11-26 46 views
1

在這一個我不介意。這裏的情況和我迄今爲止的嘗試:MySQLi插入到語句中插入數據,但也顯示錯誤

我有一個簡單的表單,收集一個電子郵件和密碼,然後應該插入到三列數據庫表中。該表格被稱爲users,三列被稱爲userID,userEmail,userPassword。這裏是我的出發代碼:

// hash the password value 
$pass = hash_hmac('sha256', $p, 'c#hArl891', true); 

// Query the database: 
$q = "INSERT INTO users (userEmail, userPassword) VALUES ('".$e."','".$pass."')";  
$r = mysqli_query ($dbc, $q); 

if (mysqli_num_rows($r) == 1) { // Successful insertion. 

如何處理此代碼發生的是電子郵件(可變$e)在數據庫中出現了正確的密碼是亂碼一塌糊塗(只是一個枝節問題),但mysqli_num_rows($r)返回此錯誤:

mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given 

我試過只用$ p替換哈希值,我試着更換與常量兩個變量,我用周圍的表名和字段名背部蜱嘗試過了,我我嘗試了一個建議,我在網上找到使用大括號:

$q = "INSERT INTO users (`userEmail`,`userPassword`) VALUES ('{$e}','{$pass}')"; 

似乎沒有什麼工作得到mysqli_num_rows($r) == 1

根據返回的錯誤訊息,我看到的變量值:

[e] => [email protected] 
[p] => 12345 
[pass] => Ç o’,YÊ2ý€|y:fز"?ïÑ`{a]YÑ=Âk¼ 
[q] => INSERT INTO `users` (`userEmail`, `userPassword`) VALUES ('[email protected]', 'Ç o’,YÊ2ý€|y:fز"?ïÑ`{a]YÑ=Âk¼') 
[r] => 1 

[dbc] => mysqli Object 

這些似乎表明,$r DOES等於1但這是直接取自相同的錯誤信息。

我整晚都在睡覺,我想這一定是顯而易見的事情,我只是過分看,但我看不到它。

回答

0

插入查詢不返回結果集,只能在結果集上使用mysqli_num_rows()

嘗試做

if (mysqli_affected_rows($dbc) > 0) { 

至於你的散列的問題,你一定要存儲原始二進制輸出?在您的hash_hmac()函數中將true更改爲false,或在原始二進制數據上使用bin2hex()以獲取一些可讀數據。

+0

確定了主要問題;錯誤信息消失了,我能夠正確地觸發條件。非常感謝你! –

+0

不客氣。在你的散列問題上增加了一些輸入。 –

+0

謝謝你的散列信息。如果可以的話,我會將問題標記爲兩次。非常感激。 –