我试图在一个简单的mysql更新查询中获取受影响的行数。但是,当我在下面运行此代码时,PHP的mysql_affected_rows()总是等于0.无论foo = 1已经存在(在这种情况下函数应该正确返回0,因为没有更改行),或者如果foo当前等于某个其他整数(在这种情况下函数应返回1)。
$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2";
mysql_query($updateQuery);
if (mysql_affected_rows() > 0) {
echo "affected!";
}
else {
echo "not affected"; // always prints not affected
}
UPDATE语句本身有效。 INT在我的数据库中被更改。我还仔细检查了数据库连接没有事先关闭或任何时髦。请记住,mysql_affected_rows并不一定要求您传递连接链接标识符,尽管我也尝试过。
有关功能的详细信息:mysql_affected_rows
有什么想法吗?
答案 0 :(得分:21)
较新版本的MySQL非常聪明,可以查看修改是否完成。让我们说你发了一个UPDATE声明:
UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234
假设列的值已经为1;然后没有更新过程发生,因此 mysql_affected_rows()将返回0;否则如果列惰性具有其他值而不是1,则返回1。除人为错误外没有其他可能性。
答案 1 :(得分:1)
您是否尝试过直接使用MySQL函数ROW_COUNT
?
mysql_query('UPDATE myTable SET foo = 1 WHERE bar = 2');
if(mysql_result(mysql_query('SELECT ROW_COUNT()'), 0, 0)) {
print "updated";
}
else {
print "no updates made";
}
有关使用ROW_COUNT
和其他MySQL信息功能的更多信息,请访问:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count
答案 2 :(得分:1)
mysqli_affected_rows要求您将对数据库连接的引用作为唯一参数传递,而不是对mysqli查询的引用。例如
$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname");
$updateQuery = mysqli_query($dbref,"UPDATE myTable SET foo=1 WHERE bar=2");
echo mysqli_affected_rows($dbref);
不是
echo mysqli_affected_rows($updateQuery);
答案 3 :(得分:0)
尝试像这样连接:
$connection = mysql_connect(...,...,...);
然后像这样打电话
if(mysql_affected_rows($connection) > 0)
echo "affected";
} else { ...
答案 4 :(得分:0)
我认为您需要在更新中尝试其他内容,然后foo = 1。把一些东西完全不同然后你会看到它是否更新或没有if循环。如果确实如此,你的if循环应该有效。
答案 5 :(得分:0)
你这样做?
$timestamp=mktime();
$updateQuery = "UPDATE myTable SET foo=1, timestamp={$timestamp} WHERE bar=2";
mysql_query($updateQuery);
$updateQuery = "SELECT COUNT(*) FROM myTable WHERE timestamp={$timestamp}";
$res=mysql_query($updateQuery);
$row=mysql_fetch_row($res);
if ($row[0]>0) {
echo "affected!";
}
else {
echo "not affected";
}
答案 6 :(得分:0)
以下注释对您有所帮助,
mysql_affected_rows()返回
+0:未更新或插入行(可能是因为该行已存在, 但在UPDATE期间没有实际更改任何字段值。
+1:插入了一行
+2:行已更新
-1:如果有错误。
答案 7 :(得分:0)
这是因为mySql正在检查该字段是否进行了任何更改, 为了解决这个问题,我在表中创建了一个新的TINY字段'DIDUPDATE'。
将此添加到查询'DIDUPDATE = DIDUPDATE * -1'
看起来像。
<div>
<input name="age" type="number" placeholder="age">
</div>
<div>
<input name="price" type="number" placeholder="price">
</div>
<div>
Good condition?
<input name="condition" type="radio" value="true" checked>yes
<input name="condition" type="radio" value="false">no
</div>
<button onclick="calculateValue()">Compute</button>
它工作正常!!!
答案 8 :(得分:-1)
我的选择了吗?
我正要告诉检查该函数是否被多次调用!
只是一点建议:
尝试使用isset()&amp; POST / GET或类似的东西;
if ( isset( $_POST['Update'] == 'yes' ) ) :
// your code goes here ...
endif;
希望它清楚有用,Ciao:)