单查询MySQL中的INSERT和SELECT

时间:2012-03-29 14:09:16

标签: php mysql

如何用中的INSERT和SELECT执行单个查询,然后读取选择结果? 我想插入然后选择一些东西,所有这些都必须在一个查询中完成......

我知道它在单个查询中接受多个命令...但我想读取查询结果而我无法读取结果。我这样做:

$results=mysql_query("
INSERT INTO table1 (field1,field2) VALUES('aaa','bbbb') ON DUPLICATE KEY UPDATE `field1` = 'cccc', `field2`='dddddd'; 
SELECT field3 Form Table3 WHERE field3='eeeee';
",$connection);

while ($rows = mysql_fetch_array($results, MYSQL_NUM))  
echo $rows[0];

4 个答案:

答案 0 :(得分:4)

  

一切都必须在一个查询中完成......

为什么需要一个查询中执行所有操作?

像Wiseguy所说,我认为你所寻找的东西被称为交易。

此外,考虑更新到PDO可能是一个好主意,这将为您提供更完整的工具集,如交易和查询参数。

无论如何,为了回答你的初步问题,不可能。

更新:以下是PDO中的交易示例。

try
{
    $pdo->beginTransaction();

    $pdo->query(' ... ');
    $pdo->query(' ... ');
    $pdo->query(' ... ');

    $pdo->commit();
}
catch(Exception $e)
{
    $pdo->rollback();
    die($e->getCode() . ': ' . $e->getMessage());
}

答案 1 :(得分:3)

不可能,并且不建议这样做,因为kappa指出,如果你执行2个单独的查询,你将能够检查结果等,这是更好的。

答案 2 :(得分:2)

如果使用mysqli扩展名,可以在PHP中发送多个语句,出于很多原因,最好使用旧的mysql扩展名来代替旧的mysql扩展名。以下是根据您的问题从文档的multiple statements部分修改示例:

$mysqli = new mysqli("example.com", "user", "password", "database");

$sql .= "INSERT INTO table1 (field1,field2) VALUES('aaa','bbbb') ON DUPLICATE KEY UPDATE `field1` = 'cccc', `field2`='dddddd';";
$sql .= "SELECT field3 Form Table3 WHERE field3='eeeee';";

$mysqli->multi_query($sql);

do {
    if ($res = $mysqli->store_result()) {
        var_dump($res->fetch_all(MYSQLI_ASSOC));
        $res->free();
    }
} while ($mysqli->more_results() && $mysqli->next_result());
?>

请注意,文档确实将通话时间用于多个语句的安全风险,每个人都指出这些风险。当然,另一个原因是,如果你想让第二个陈述受到第一个陈述的影响,那并不总是一个好主意。

答案 3 :(得分:0)

我也不建议这样做,但您可以使用pdo执行此操作,如此主题所示:PDO support for multiple queries (PDO_MYSQL, PDO_MYSQLND)