2013-03-31 46 views
1

(對不起,我真的不知道我在做什麼。)mySQLi_affected_rows檢查不起作用,還是......?

我有這樣的統一遊戲在Facebook上呼籲在同一目錄下的PHP文件的iframe,而很多工作。我想要它做的是更新球員記錄,如果它在那裏,則創建一個記錄。

這個腳本運行,但它總是返回一個「不在這裏」,當我檢查數據庫時,它實際上是每次創建記錄,但是對於日期時間字段是相同的。所以我不明白爲什麼affected_rows永遠不會回到「1」。

<?php 
$db = @new mysqli('••.•••.•••.••', '•••••••••••', '••••••••','•••••••••••'); 
if ($db->connect_errno) 
{ 
echo("Connect failed "+mysqli_connect_error()); 
exit(); 
} 
$inIP = $_POST["ip"]; 
$playerIP = mysqli_real_escape_string($db, $inIP); 

$inUN = $_POST["un"]; 
$playerUN = mysqli_real_escape_string($db, $inUN); 

$query = "UPDATE lobby SET whens=NOW(), wherefores='$playerIP', whys=0 WHERE whos='$playerUN'"; 
mysqli_query($db, $query); 
if (mysqli_affected_rows($db) > 0) 
    { 
    echo "here"; 
    } 
else 
    { 
    $query2 = "INSERT INTO lobby (whens,whos,wherefores,whys) values (NOW(),'$playerUN','$playerIP',0)"; 
    mysqli_query($db, $query2); 
    echo "not here"; 
    } 

if ($db) 
    {  
    $db->close(); 
    } 
?> 
+0

爲什麼不是'INSERT INTO ... ON DUPLICATE KEY UPDATE ...'而不是?一個單一的查詢,而不是(可能)兩個?注意:PHP的連接運算符是'.'。這是完全錯誤的:'echo('connect failed'+ mysqli_connect_error())'。你還假設你的查詢工作,並抑制了錯誤。 **從不**取得成功。 –

+0

變量區分大小寫。請啓用一次error_reporting。而且,當已經使用mysqli時,請考慮準備好的語句。 – mario

+0

如果'$ playerIP'和'$ playerip'只是一個錯字,你的腳本就容易受到SQL注入的攻擊。 – Gumbo

回答

0

你有一個錯字:

wherefores=$playerip 

應該

wherefores=$playerIP 

因爲

mysqli_affected_rows($db) 

回報

-1 
+0

謝謝,但是我在發佈問題並解決問題後看到了這一點;顯然這不是問題。 –

+0

變化 'mysqli_query($分貝,$查詢);' 到 'mysqli_query($分貝,$查詢)或triger_error(mysqli_error($ DB));' ,看看是什麼問題 – n1te

+0

這是一個重複的記錄錯誤。我拿Marc B的建議來使用INSERT INTO ... ON DUPLICATE KEY UPDATE ...(不知道他爲什麼不把它作爲答案),現在的錯誤是語法錯誤。 –

0

聽起來就像您遇到與我一樣的問題,特別是如果您通過調試器運行代碼時。我已經用Netbeans和Xdebug調查了這個問題,看起來這是MySQLi擴展本身中的一個錯誤。根據bug report已經制定。同時,您可以使用其他表達式,例如:

if (mysqli_sqlstate($dbc) == 00000) { 
    //your code 
} 

繼續調試剩餘的代碼。