簡體   English   中英

MYSQLI准備的語句插入和查找值來自其他表

[英]MYSQLI Prepared Statement Insert and lookup value From other table

我有一個准備好的語句,該語句基本上將數組中的數據插入表中。 但是我需要從數據庫中的另一張表中獲得一列。 到目前為止,我想到了這個。

$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");

如果我刪除select語句以獲取帖子ID並將其設置為靜態值,它將很好地工作。 但是我現在不確定采取哪種最佳方法。 如果它只是表的直接副本,但我只是從列中獲取一個值,我不太確定,我知道該怎么做。

我真的不確定您對SELECT語句的處理方式,尤其是因為您要插入si表時您擁有si.sku = pm.meta_value

在任何情況下,你可以嘗試使用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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM