各位大大好
小弟在做預儲程序的作業, 要求是從網頁輸入資料存入變數,然後呼叫預儲程序資料庫裡的預儲程序進行查詢並顯示資料,在phpadmin執行程序時能夠正常執行,但是從網頁輸入資料後就出現
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in D:\xampp\htdocs\10\lv.php on line 24
只要用到$result的地方都出現了BUG
網路上自己查看起來是因為$result沒有回傳值問題,這幾行反覆檢查了蠻多次還是找不到問題,麻煩各位大大賜教!
輸入學號與要查詢的科目 -> 根據成績給予評價
資料表格式: `grade`
CREATE TABLE `grade` (
`no` varchar(8) NOT NULL DEFAULT '',
`name` varchar(8) NOT NULL DEFAULT '',
`chinese` tinyint(4) NOT NULL DEFAULT '0',
`math` tinyint(4) NOT NULL DEFAULT '0',
`nature` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`no`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
//lV.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>瀏覽</title>
</head>
<body>
<?php
require_once("dbtools.inc.php");
$no_1=$_POST["no_1"];
$subject=$_POST["subject"];
//指定每頁顯示幾筆記錄
$records_per_page = 20;
$link=create_connection();
$sql="call grade_lv($no_1,$subject)";
$result=execute_sql("20201111_preload", $sql, $link);
echo mysql_query( $sql,$link );
echo $sql;
echo "總共: ".mysql_num_rows($result). " 筆"; //取得記錄數
//取得欄位數
$total_fields = mysql_num_fields($result);
//顯示欄位名稱
echo "<table border='0' align='center' width='300'>";
echo "<tr align='center'>";
for ($i = 0; $i < $total_fields; $i++)
echo "<td>" . mysql_field_name($result, $i) . "</td>";
//echo "</tr>";
//顯示記錄
$j = 1;
while ($row = mysql_fetch_row($result) and $j <= $records_per_page)
{
echo "<tr>";
for($i = 0; $i < $total_fields; $i++)
echo "<td>$row[$i]</td>";
$j++;
echo "</tr>";
}
echo "</table>" ;
//釋放記憶體空間
mysql_free_result($result);
mysql_close($link);
?>
</body>
</html>
//從網頁取得資料(html連結到php檔)
<form method="post" action="lv.php">
查詢的學生的學生證號:<input type="text" name="no_1" size="10"><br>
查詢成績評價的科目:<input type="text" name="subject" size="10"><br>
<input type="submit" value="查詢評價">
</form>
//PHPMYADMIN 預存程序內容(資料庫名稱"20201111_preload")(包含兩個VARCHAR變數no_1,subject)(該預儲程序單獨在phpadmin上執行正常)
BEGIN
SELECT *,CASE
WHEN subject="chinese" AND grade.chinese > 90 THEN 'GOOD'
WHEN subject="chinese" AND grade.chinese < 90 THEN 'OK'
WHEN subject="math" AND grade.math > 90 THEN 'GOOD'
WHEN subject="math" AND grade.math < 90 THEN 'OK'
WHEN subject="nature" AND grade.nature > 90 THEN 'GOOD'
WHEN subject="nature" AND grade.nature < 90 THEN 'OK'
END
AS LV
FROM students.grade
WHERE no = no_1;
END
//dbtools.inc.php
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
function create_connection()
{
$link = mysql_connect("localhost", "root", "")
or die("無法建立資料連接<br><br>" . mysql_error());
mysql_query("SET NAMES utf8");
return $link;
}
function execute_sql($database, $sql, $link)
{
$db_selected = mysql_select_db($database, $link)
or die("開啟資料庫失敗<br><br>" . mysql_error($link));
$result = mysql_query($sql, $link);
return $result;
}
?>
create_connection 和 execute_sql 的定義都看不到...
儘管如此
這篇可以參考看看
Stored procedure 的定義也看不完整
參考PHP stored procedure的範例看看
先確定一件事$sql="call grade_lv($no_1,$subject)";
之後echo $sql;
看看是你預期的字串嗎