mysql查询没有完全工作

3okqufwl  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(317)

我在用 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));
}
qfe3c7zg

qfe3c7zg1#

代码中的模式似乎容易受到sql注入的攻击。最佳实践是使用绑定占位符,并提供值作为绑定值。
静态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 ...

相关问题