gpt4 book ai didi

PHP - MySQL 查询不能完全工作

转载 作者:行者123 更新时间:2023-11-29 17:30:22 25 4
gpt4 key购买 nike

我正在使用 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 行 记录。然而,查询并不能完全工作。我尝试删除 30 行并从数据库中修改随机行,但查询仅插入回5 行并更新大约几行。我尝试 print_r 所有变量 $outletid, $loc ... 并且里面的值都是正确的。我不确定它会如何发生。

我也尝试过 echo 错误,但没有显示任何内容。

if (!mysqli_query($conn,$sql))
{
echo("Error description: " . mysqli_error($conn));
}

最佳答案

代码中的模式似乎容易受到 SQL 注入(inject)攻击。最佳实践是使用绑定(bind)占位符,并提供值作为绑定(bind)值。

静态 SQL 文本

$sql = 'REPLACE INTO syscompany
( outletid, loc, coname
, addr1, addr2, addr3
, type1, type2, type3
, type4, type5, mdate
) VALUES
( ?, ?, ?
, ?, ?, ?
, ?, ?, ?
, ?, ?, ?
)';

将 SQL 文本准备到语句中

if(! $stmt = $conn->prepare($sql)) {
// handle error
}

然后我们可以在循环中处理RBAR,执行之前准备好的语句...

foreach( ... ) {
...
...

// bind values and execute
$stmt->bind_param('ssssssssssss'
, $outletid, $loc, $coname
, $addr1, $addr2, $addr3
, $type1, $type2, $type3
, $type4, $type5, $mdate);

if(! $stmt->execute() ) {
// handle error
}
}
<小时/>

我们不知道该表是否有主键或任何唯一索引。我们只能推测。行为将取决于该情况以及表中已存在的行。

REPLACE INTO 作为一系列 DELETE 语句进行操作,后跟 INSERT。假设 outletid 是表的主键,并且 (coname,addr1) 是唯一键

REPLACE INTO 相当于运行这两个语句

 DELETE FROM syscompany WHERE outletid = ? ;
DELETE FROM syscompany WHERE coname = ? and addr1 = ? ;

(由要插入的行提供的值),后跟

 INSERT INTO syscompany ...

关于PHP - MySQL 查询不能完全工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com