Как вернуть переменные, которые были установлены в MySQL, обратно в PHP - PullRequest
0 голосов
/ 23 марта 2012

У меня есть функция 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;

Я пытаюсь использовать LAST_INSERT_ID (@asset) первого статического элемента INSERT в качестве переменной для моей следующей функции. В надежде установить переменную я вызываю вышеуказанную функцию следующим образом:

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

Я почти уверен, что моя проблема где-то около "return $ asset_ID" в моем операторе SQL. Я смог сделать это успешно, используя только 1 вызов LAST_INSERT_ID.

Ничего не возвращается вообще.

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Разбить это на несколько запросов было бы действительно лучшим решением, но для ответа на исходный вопрос: если вы хотите получить значение переменных MySQL в PHP, просто выполните запрос SELECT:

$asset_ID = mysql_result( mysql_query( 'SELECT @asset_ID' ) );
0 голосов
/ 23 марта 2012

Хорошо, как уже упоминалось в моих комментариях, вы можете использовать beginTransaction, чтобы разбить это.http://php.net/manual/en/pdo.begintransaction.php

После того, как вы это сделаете, вам нужно только получить последний вставленный идентификатор.Вы можете использовать lastInsertId для этого: http://php.net/manual/en/pdo.lastinsertid.php

...