php - MYSQLI Prepared Statement Insert and lookup value 来自其他表

标签 php mysql mysqli

我有一个准备好的语句,基本上是将数组中的数据插入到表中。但是我需要从数据库中的另一个表中获取其中一列。到目前为止,我想到了这个。

$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/

相关文章:

php - 我应该如何处理用户名已被使用的情况?

php - 我如何搜索 php mysql 高级搜索

php - 通过 PHP 调用页面加载的随机记录,通过 AJAX 动态显示结果

php - 如何在 php 中读取 JsonResponse

php - 使用php在Mysql数据库中存储数据时遇到问题

mysql - 如何在 mysql 中两次连接同一个表?

php - 用 php 回显 mysqli 数据?

php - 在同一个类中调用 __call 而不是 __callstatic,而不是调用另一个类

PHP 函数不可用 - 可能缺少 APACHE 编译配置

MySQL 基于 3 个不同标准对单行进行计数