php で戻り値とクエリを持つ mysql ストアド プロシージャを取得する方法
ストアド プロシージャ
プロシージャ a(out b int)
begin
select 10;
set b=3;
end;
PHP
$tsql .= "call a(@b);";
$tsql .= "select @b;";
if($mysqli-> multi_query($tsql)) {
if($result = $mysqli->store_result()) {
while($row = $result->fetch_array()) {
array_push($data) ['table'], $row);
}
}
if($mysqli->more_results()){ // 結果セットがあるかどうかを判断します
if($mysqli- > ;next_result()) {
if($result = $mysqli->store_result()) {
if($row = $result->fetch_row()) {
for($i = 0, $count = count($row); $i $data['output'][$i] = $row[$i];
}
}
}
}
}
} else {
echo "ERROR:", $mysqli->errno, "---", $mysqli->error;
}
print_r($data['output']);
戻り値を指定せずに b を直接選択した場合は、戻り値を取得することができます。ストアド プロシージャ内でクエリを実行しなくても実行できます
両方を同時に使用すると戻り値を取得できません
これを解決する方法
------解決策--------------- --------
<?php 2 定義('CLIENT_MULTI_RESULTS', 131072); 3 4 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) または die("接続できませんでした: ".mysql_error()); 5 mysql_select_db("vs") または die("データベースを選択できませんでした"); 6?> 7 8<?php 9 $result = mysql_query("call get_news_from_class_id(2)") または die("クエリが失敗しました:" .mysql_error()); 10 while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 11 { 12 $line = '<tr><td><a target = _blank href=''.$row["url"].''>'.$row["title"].'('. $row["page_time"].')'.'</a></td></tr>'; 14 エコー $line; 15 printf("n"); 16 17} 18 mysql_free_result($result); 19 ?> 20 21<?php 22 mysql_close($link); 23 ?><div class="clear"></div>