【问题标题】:PDO Array from MySQL Query into Insert Queries从 MySQL 查询到插入查询的 PDO 数组
【发布时间】:2012-07-16 09:47:40
【问题描述】:

我有一个从以下 PDO 获得的数组:

$sqlQry = "SELECT Devices.dID FROM Friends LEFT OUTER JOIN Devices ON Friends.fID = Devices.dUID WHERE Devices.dID IS NOT NULL GROUP BY Devices.dID";
$db = getConnection();
$sth = $db->prepare($sqlQry);
$sth->execute();
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);

数组返回:

Array ( [0] => Array ([dID] => 2[0] => 2 ) [1] => Array ( [dID] => 3 [0] => 3 ))

对于每个 dID 值,我需要运行一个插入查询,该查询获取 dID 并将其插入到具有外部值的同一数据库中的表中。

$sqlIns = "INSERT INTO messages (dID, message, status") VALUES (?,?,?);

消息和状态将保存在一个变量中

谁能帮我解决这个问题?

【问题讨论】:

  • 为什么不在一个查询中完成所有这些操作?

标签: php mysql pdo


【解决方案1】:

您可以在一个查询中完成所有操作。请参阅文档:INSERT ... SELECT Syntax

INSERT into messages (dID, message, status) 
SELECT Devices.dID, ?, ? 
FROM Friends 
LEFT OUTER JOIN Devices ON Friends.fID = Devices.dUID 
WHERE Devices.dID IS NOT NULL 
GROUP BY Devices.dID

PDO 看起来像这样:

// database connection
$conn = new PDO(...);

// new data
$message = 'xxx';
$status = 'yyy';

// query
$sql = "INSERT into messages (dID, message, status) 
    SELECT Devices.dID, ?, ? 
    FROM Friends 
    LEFT OUTER JOIN Devices ON Friends.fID = Devices.dUID 
    WHERE Devices.dID IS NOT NULL 
    GROUP BY Devices.dID";
$q = $conn->prepare($sql);
$q->execute(array($message,$status));

【讨论】:

  • 谢谢你发布你会怎么做我是 PDO 的新手,它真的会帮助我
【解决方案2】:
foreach( $result as $idValue ) {
    $sqlIns = "INSERT INTO messages (dID, message, status) VALUES ($idValue[0],?,?)";
}

这应该可以解决问题。虽然我不确定你为什么使用fetchAll

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多