2012-12-06 93 views
0

我得到了一些問題mysqli_affected_rows,它返回所有的時間甚至更新不受影響。mysqli_affected_rows始終返回1

$dbConnect = mysql_connect($dbHost, $dbUser, $dbPass); 
$dbSelect = mysql_select_db($dbName, $dbConnect); 

$sqlprove = mysql_query('UPDATE '.tblAVB.' SET a= "1" WHERE id= "'.$_POST['id'].'" AND Active = "1" '); 

$isprove = mysqli_affected_rows($sqlprove); 

可以任何身體幫助我嗎?

+1

'mysqli的!= mysql'。它們是PHP中的兩個完全獨立和獨立的庫。來自一個庫的結果/句柄在其他庫的調用中不可用。 –

回答

3

如果你使用mysqli然後使用mysqli前綴的函數。您不能與已棄用的mysql_query方法混用並匹配。

事實上,你不應該使用mysql_query在所有如果你使用mysqli

如果你剛剛你應該使用PDO,而不是開始。該mysqli接口比傳統的更好,但比起PDO這是相當煩人,脾氣古怪。

在任何情況下,你必須要非常小心,總是使用任何和所有值proper SQL escaping

+0

比使用SQL轉義更好的是使用適當的參數化查詢。 http://bobby-tables.com/php.html給出了一些例子。 –

+0

是** mysql_affected_rows **工作嗎? – OceanOne

+0

如果你**絕對**必須使用'mysql_query',那麼是的。我強烈建議你不要。如果使用不當,極其危險。在你的例子中,你已經創建了一個**嚴重的** SQL注入漏洞,因爲你沒有正確地轉義你的'$ _POST'值。 – tadman

0

我有這樣的一個,它的工作,但我不希望使用面向對象的風格在代碼的中間:

$mysqli->query('UPDATE '.tblAVB.' SET a= "1" WHERE id= "'.$_POST['id'].'" AND Active = "1" '); 

$prove = $mysqli->affected_rows; 

和程序風格不起作用!!!!! 因爲我在查詢之前將它連接到數據庫並且不使用$ link !!!!

$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 
mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50"); 
printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link)); 

是不是因爲我使用的MySQL 庫MySQLi? 有沒有辦法讓mysql的affected_rows? reference

+0

如果您在使用'mysqli',那麼你*必須*使用SQL佔位符功能。查詢應該看起來像'where id =?',稍後您將使用'bind_param'來爲其分配'$ _POST'。 – tadman