我想根据另一个表中的值更新表。如果不存在记录,则插入为新记录。此代码正确更新,但不会插入记录不存在的位置。
$results_google = mysql_query("upadate google set
Description = '".mysql_real_escape_string(trim(addslashes(strip_tags($row_first['product_description']))))."',
Manufacturer = '".$row_first['product_vendor']."',
Price = '".$row_first['product_price']."',
Title ='".$row_first['product_title']."'
WHERE product_id = '".mysql_real_escape_string($row_first['product_id'])."';");
if(!$results_google) {
$google = "insert into `google`(`product_id`,`id`,`Description`,`Link`,`Manufacturer`,`Title`,
`Price`,`Shipping_Weight`,`Image_Link`,`Brand`,`inv_id`)
VALUES (
'".mysql_real_escape_string($row_first['product_id'])."',
'".mysql_real_escape_string($row_first['product_id'])."',
'".mysql_real_escape_string(trim(strip_tags(addslashes($row_first['product_description']))))."',
'".mysql_real_escape_string($row_first['product_link'])."',
'".mysql_real_escape_string($row_first['product_vendor'])."',
'".mysql_real_escape_string($row_first['product_title'])."',
'".mysql_real_escape_string($row_first['product_price'])."',
'".mysql_real_escape_string($row_first['weight'])."',
'".mysql_real_escape_string($row_first['image_link'])."',
'".mysql_real_escape_string($row_first['product_vendor'])."',
'$inventory_id')";
mysql_query ($google) or die("google".mysql_error());
}
答案 0 :(得分:2)
如果您询问如何插入行或更新它(如果已存在),则需要查看ON DUPLICATE KEY UPDATE
。 ON DUPLICATE KEY UPDATE
只会检查UNIQUE索引或主键,因此请确保将导致其他行的不同字段标记为唯一(或者您可以执行多列唯一索引)。
答案 1 :(得分:1)
虽然@Konerak的评论确实是正确的方法,结合准备好的语句并了解你的数据(转换为ints
进行整数,使用字符串函数进行字符串等),我会回答这个问题至于为什么你的代码没有按预期工作。
您正在使用带有WHERE
语句的更新查询。如果未找到匹配的行,则不会更新任何行,但查询不会返回false,因为mysql_query
仅在出错时返回false并且找不到要更新的行不是错误。因此,只要您的查询有效,您的if
语句将始终为false。
修改:如下面的评论中所述,您可以使用mysql_affected_rows()
检查是否没有更新行:
if (mysql_affected_rows() == 0)
{
// insert a record
}
但我真的建议采用ON DUPLICATE KEY UPDATE
和准备好的陈述方式。