2012-12-06 77 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