如何将在MySQL中设置的变量返回给PHP

时间:2012-03-23 17:54:50

标签: php mysql last-insert-id

我有一个PHP函数,可以在MySQL中插入多条记录:

function commit_purchase($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $date, $org_to_member_ID, $asset_ID, $purchaser_cur_invest, $purchaser_cred_deb, $purchaser_balance) {
    global $db;
    $query = "START TRANSACTION;
          INSERT INTO assets
            (asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date, is_approved)
          VALUES
            (:asset_type_ID, :org_ID, :asset_desc, :asset_cost, :asset_cost, :date, 1);
          SET @asset_ID = LAST_INSERT_ID();
          INSERT INTO cash_out
            (org_to_member_ID, amount, description, date, is_approved, asset_ID)
          VALUES
            (:org_to_member_ID, :asset_cost, :asset_desc, :date, 1, @asset_ID);
          SET @cash_out_ID = LAST_INSERT_ID();
          INSERT INTO shares
            (asset_ID, member_ID, percent_owner, is_approved)
          SELECT assets.asset_ID, pending_asset_shares.member_ID, pending_asset_shares.percent_owner, pending_asset_shares.is_approved
          FROM assets, pending_asset_shares
          WHERE assets.asset_ID = @asset_ID;
          DELETE FROM pending_asset_shares
          WHERE asset_ID = :asset_ID;
          DELETE FROM pending_assets
          WHERE pending_asset_ID = :asset_ID;
          INSERT INTO trans_log
             (translog_id, trans_type, org_to_member_ID, date, purchaser, asset_ID, cur_invest, cash_out_ID, cred_deb, balance)
          VALUES
             (DEFAULT, 3, :org_to_member_ID, :date, :org_to_member_ID, @asset_ID, :purchaser_cur_invest, @cash_out_ID, :purchaser_cred_deb, :purchaser_balance);
          COMMIT;";
$statement = $db->prepare($query);
$statement->bindValue(':asset_type_ID', $asset_type_ID);
$statement->bindValue(':org_ID', $org_ID);
$statement->bindValue(':asset_desc', $asset_desc);
$statement->bindValue(':asset_cost', $asset_cost);
$statement->bindValue(':date', $date);
$statement->bindValue(':org_to_member_ID', $org_to_member_ID);
$statement->bindValue(':purchaser_cur_invest', $purchaser_cur_invest);
$statement->bindValue(':purchaser_cred_deb', $purchaser_cred_deb);
$statement->bindValue(':purchaser_balance', $purchaser_balance);
$statement->bindValue(':asset_ID', $asset_ID);
$statement->execute();
$statement->closeCursor();
return $asset_ID;

我正在尝试使用第一个INSERT语句的LAST_INSERT_ID(@asset)作为我的下一个函数的变量。我调用上述函数的方式是希望设置变量:

$asset_ID = commit_purchase($asset_type_ID, $org_ID,.......etc.)

我很确定我的问题是在我的SQL语句中的“return $ asset_ID”附近。仅使用1个LAST_INSERT_ID调用时,我能够成功完成此操作。

根本没有任何回报。

2 个答案:

答案 0 :(得分:0)

好的,正如我的评论中所提到的,你可以使用beginTransaction来解决这个问题。 http://php.net/manual/en/pdo.begintransaction.php

完成后,只需获取最后插入的ID即可。您可以使用lastInsertIdhttp://php.net/manual/en/pdo.lastinsertid.php

答案 1 :(得分:0)

将其分解为多个查询确实是最好的解决方案,但要回答原始问题:如果要在PHP中获取MySQL变量的值,只需执行SELECT查询:

$asset_ID = mysql_result( mysql_query( 'SELECT @asset_ID' ) );