Php 为什么我不能使用REPLACE。我如何更新表中的一行,或者在它不存在时插入它?
我想更新表中的一行,或者如果它不存在就插入它 我已经阅读了这个链接中的解决方案 所以,我使用了替换,但它不起作用。它只向表中添加了新行,但没有更新任何内容。 这是我的结构Php 为什么我不能使用REPLACE。我如何更新表中的一行,或者在它不存在时插入它?,php,mysql,database,Php,Mysql,Database,我想更新表中的一行,或者如果它不存在就插入它 我已经阅读了这个链接中的解决方案 所以,我使用了替换,但它不起作用。它只向表中添加了新行,但没有更新任何内容。 这是我的结构 请告诉我正确的语法。我猜username是一个字段,如果它是重复的,您需要更新它。因此,如果用户名是唯一密钥,则可以执行以下操作: insert into general ([fields]) values ([values]) on duplicate username update [whatever] 我找到了解决
请告诉我正确的语法。我猜username是一个字段,如果它是重复的,您需要更新它。因此,如果用户名是唯一密钥,则可以执行以下操作:
insert into general ([fields]) values ([values])
on duplicate username update
[whatever]
我找到了解决办法。
我使用if-else条件来证明它。
这是我的代码结果
//after upload complete insert pic data into database
$con = mysqli_connect("localhost", "root", "root", "museum");
$sql = "SELECT logo,bgBNPage FROM general ";
$result = mysqli_query($con, $sql);
if (!$con) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$fields = implode(', ', $sql_field_list);
$values = implode("', '", $sql_value_list);
if(mysqli_num_rows($result) > 0)
{
$str_array = [];
for($i =0; $i < count($sql_field_list); $i++)
{
$str_array[] = $sql_field_list[$i] . "='" . $sql_value_list[$i] ."'";
}
$sql = 'UPDATE general SET ' . implode(',', $str_array);
//$sql = "UPDATE general SET (" . $fields . ") = ('" . $values . "');";
}
else
{
$sql = "INSERT INTO general (" . $fields . ") VALUES ('" . $values . "');";
}
if (!mysqli_query($con, $sql)) {
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
您正在执行的实际SQL查询中有哪些不起作用?如果您的SQL查询没有达到预期效果,您至少应该看看该查询是什么。您必须在$SQL\u字段\u列表和$SQL\u值\u列表中设置主键。如果不是,则replace无法识别特定行。您将在这里找到一个解释:您的解决方案不是原子的。如果记录存在,但在选择时间和更新时间之间发生不同的更新或删除,会发生什么情况?您将覆盖另一个更新,如果记录已被删除,则会出现错误。此外,您可能希望在提交查询之前检查连接。
insert into general ([fields]) values ([values])
on duplicate username update
[whatever]
//after upload complete insert pic data into database
$con = mysqli_connect("localhost", "root", "root", "museum");
$sql = "SELECT logo,bgBNPage FROM general ";
$result = mysqli_query($con, $sql);
if (!$con) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$fields = implode(', ', $sql_field_list);
$values = implode("', '", $sql_value_list);
if(mysqli_num_rows($result) > 0)
{
$str_array = [];
for($i =0; $i < count($sql_field_list); $i++)
{
$str_array[] = $sql_field_list[$i] . "='" . $sql_value_list[$i] ."'";
}
$sql = 'UPDATE general SET ' . implode(',', $str_array);
//$sql = "UPDATE general SET (" . $fields . ") = ('" . $values . "');";
}
else
{
$sql = "INSERT INTO general (" . $fields . ") VALUES ('" . $values . "');";
}
if (!mysqli_query($con, $sql)) {
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);