Шаблон в коде выглядит уязвимым для 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 ...