Smi*_*ith 3 php mysqli stored-procedures
我有两个存储过程,我需要将记录(比如选择每个下一个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
Run Code Online (Sandbox Code Playgroud)
我然后在PHP中得到计数;像这样
$result = $mysqli->query(sprintf("call trans_all('%s')",$phone));
$num_recs = $result->num_rows;
Run Code Online (Sandbox Code Playgroud)
然后我需要选择精确的记录,我这样做
$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
Run Code Online (Sandbox Code Playgroud)
第二个存储过程是
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
Run Code Online (Sandbox Code Playgroud)
什么可能导致这个错误?
SP返回包含状态的第二个结果集.您需要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();
Run Code Online (Sandbox Code Playgroud)