我有一个准备好的语句,基本上是将数组中的数据插入到表中。但是我需要从数据库中的另一个表中获取其中一列。到目前为止,我想到了这个。
$query = "INSERT INTO stockimp si (sku,stock,status,productID)
VALUES (?,?,?,(SELECT post_id FROM postmeta pm
WHERE si.sku = pm.meta_value AND pm.meta_key = '_sku')) ";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("sss", $dbSKU, $dbStock, $dbStatus);
$mysqli->query("START TRANSACTION");
如果我删除用于获取帖子 ID 的 select 语句并将其设置为静态值,它将正常工作。但我现在不确定在这里采取的最佳方法。如果它只是表的直接副本但我不太确定只是从列中获取一个值,我知道该怎么做。
最佳答案
我真的不确定你在用 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();
}
}
关于php - MYSQLI Prepared Statement Insert and lookup value 来自其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571724/