我在用 REPLACE INTO
使用查询从数组更新数据库 foreach
.
foreach ($data as $row) {
$outletid = $row['outletid'];
$loc = $row['loc'];
$coname = $row['coname'];
$addr1 = $row['addr1'];
$addr2 = $row['addr2'];
$addr3 = $row['addr3'];
$type1 = $row['type1'];
$type2 = $row['type2'];
$type3 = $row['type3'];
$type4 = $row['type4'];
$type5 = $row['type5'];
$mdate = $row['mdate'];
$sql = $conn->prepare("REPLACE INTO syscompany (outletid, loc, coname, addr1, addr2, addr3, type1, type2, type3, type4, type5, mdate)
VALUES ('$outletid', '$loc', '$coname', '$addr1', '$addr2', '$addr3', '$type1', '$type2', '$type3', '$type4', '$type5', '$mdate')");
$sql -> execute();
}
我有 147 rows
我数据库中的记录。然而,查询并不能完全工作。我试过了 delete 30 rows
并从我的数据库中修改随机行,查询只插入回 5 rows
更新了几行。我试过了 print_r
我所有的变量 $outletid, $loc ...
里面的数值都是正确的。我不知道怎么会这样。
我也试过 echo
错误,但什么也没有出现。
if (!mysqli_query($conn,$sql))
{
echo("Error description: " . mysqli_error($conn));
}
1条答案
按热度按时间qfe3c7zg1#
代码中的模式似乎容易受到sql注入的攻击。最佳实践是使用绑定占位符,并提供值作为绑定值。
静态sql文本
将sql文本准备到语句中
然后我们可以在循环中处理rbar,执行先前准备的语句。。。
我们不知道该表是否有主键或任何唯一索引。我们只能猜测。行为将取决于它,以及表中已经存在哪些行。
这个
REPLACE INTO
作为一系列DELETE
声明,然后是INSERT
. 假设outletid
是表的主键(coname,addr1)
是唯一的密钥这个
REPLACE INTO
相当于运行这两个语句(从要插入的行提供的值),后跟