使用MySQL和PHP更新或插入行
在许多情况下,您需要在表中插入或更新某些数据,但是不确定要执行哪个功能。常见的解决方案是先对表进行查询,以查看数据是否存在,如果不存在,则插入数据,如果存在则进行更新。但是,这会造成不必要的开销,因为每次运行代码时,至少要运行2个查询。
更好的方法是尝试更新表,然后使用该mysql_info()函数检测查询中要更新的行数以及与更新查询中的参数匹配的行数。
进行以下查询。
UPDATETABLESETVALUE="value"WHEREvalueId=2;
在表上运行时,该mysql_info()函数返回以下结果。
Rowsmatched:0Changed:0Warnings:0
这说明表中不存在valueID2。因此,我们需要运行一个插入查询。
以下代码段将使您可以在表上运行更新查询,检测该值是否存在,然后插入数据。
$sql = 'UPDATE table SET value = "value" WHERE valueId = 2'; mysql_query($sql); //更新有效吗? preg_match('/Rows matched: ([0-9])/',mysql_info(),$match); if ($match[1] == 0) { //插入数据库 $sql = 'INSERT INTO table(valueID, value) VALUE(2, "value")'; mysql_query($sql); } }
最后,您可能会争辩说,使用该mysql_affected_rows()功能可能是更好的解决方案。但是,这只会告诉您受影响的行数,因此,如果更新查询找到正确的行但不更改信息,则它将显示值为0。