У меня есть две процедуры хранения, мне нужно было записать запись (например, выбрать каждый следующий n
записей) в первую, которая отображает все соответствующие записи.
CREATE PROCEDURE `trans_all`(IN varphone VARCHAR(15)) BEGIN Select loans.amt, loans.date, loans.pay_period, borrower.phone As borrower_phone, borrower.name As borrower_name, lender.phone As lender_phone, lender.name As lender_name, From loans Left Join users borrower On borrower.id = loans.borrower_id Left Join users lender On lender.id = loans.lender_id Where (lender.phone = varphone) or (borrower.phone = varphone); END
Затем я получаю счет в php;
$result = $mysqli->query(sprintf("call trans_all('%s')",$phone)); $num_recs = $result->num_rows;
тогда мне нужно было выбрать точные записи, чтобы я делал это
$result = $mysqli->query(sprintf("call trans_history('%s','%s','%s')",$phone,$start,$limit)); $row = $result->fetch_assoc(); // this like gives the error Commands out of sync; you can't run this command now
вторая хранимая процедура
CREATE PROCEDURE `trans_history`(IN varphone VARCHAR(15), IN page INT, IN items INT) BEGIN Select loans.amt, loans.date, loans.pay_period, borrower.phone As borrower_phone, borrower.name As borrower_name, lender.phone As lender_phone, lender.name As lender_name, From loans Left Join users borrower On borrower.id = loans.borrower_id Left Join users lender On lender.id = loans.lender_id Where (lender.phone = varphone) or (borrower.phone = varphone) LIMIT page , items; END
что может быть причиной этой ошибки?
SPs возвращают второй набор результатов, который содержит статус. Вам нужно использовать next_result()
прежде чем next_result()
последующие запросы.
$result = $mysqli->query(sprintf("call trans_all('%s')",$phone)); $num_recs = $result->num_rows; $result->close(); $mysqli->next_result(); // <- you need this before you make another query //Then make call second SP $result = $mysqli->query(sprintf("call trans_history('%s','%s','%s')",$phone,$start,$limit)); $row = $result->fetch_assoc(); $result->close(); $mysqli->next_result();