Я действительно не уверен в том, что вы делаете с этим оператором SELECT
, особенно там, где у вас есть si.sku = pm.meta_value
, так как вы вставляете в таблицу si
.
Вв любом случае вы можете попробовать использовать INSERT...SELECT
вместо некоторых параметризованных значений в SELECT
.
Например,
$sql = <<<_SQL
INSERT INTO stockimp (sku, stock, status, productID)
SELECT ?, ?, ?, pm.post_id
FROM postmeta pm
WHERE pm.meta_key = '_sku' AND pm.meta_value = ?
_SQL;
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ssss', $dbSKU, $dbStock, $dbStatus, $dbSKU);
foreach ($arrayValues as list($dbSKU, $dbStock, $dbStatus)) {
$stmt->execute();
}
Обратите внимание на повторение $dbSKU
в списке параметров.
Лично я бы просто использовал пару утверждений.Предполагая, что ваши $db*
значения получены из массива значений ...
// Prepare first, then loop for best performance
$postStmt = $mysqli->prepare(
"SELECT post_id FROM postmeta WHERE meta_key = '_sku' AND meta_value = ?");
$postStmt->bind_param('s', $dbSKU);
$inStmt = $mysqli->prepare(
'INSERT INTO stockimp (sku, stock, status, productID) VALUES (?, ?, ?, ?)');
$inStmt->bind_param('sssi', $dbSKU, $dbStock, $dbStatus, $postId);
foreach($arrayOfValues as list($dbSKU, $dbStock, $dbStatus)) {
$postStmt->execute();
$postStmt->bind_result($postId);
while($postStmt->fetch()) {
$inStmt->execute();
}
}