iT邦幫忙

0

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

https://ithelp.ithome.com.tw/upload/images/20201130/20133095gxLLdFItQG.jpg各位大大好
小弟在做預儲程序的作業, 要求是從網頁輸入資料存入變數,然後呼叫預儲程序資料庫裡的預儲程序進行查詢並顯示資料,在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;
  }
?>
海綿回答的很好了,我就不回答了。
感謝你的指定。
不過基本上還是會建議你早點學用pdo吧。
不要再用mysql函數了。
BapAsleep iT邦新手 5 級 ‧ 2020-11-30 22:42:18 檢舉
了解 感謝答覆
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-30 20:51:39
最佳解答

create_connection 和 execute_sql 的定義都看不到...

儘管如此
這篇可以參考看看

Stored procedure 的定義也看不完整
參考PHP stored procedure的範例看看

先確定一件事
$sql="call grade_lv($no_1,$subject)";之後
echo $sql;看看是你預期的字串嗎

看更多先前的回應...收起先前的回應...
BapAsleep iT邦新手 5 級 ‧ 2020-11-30 20:58:48 檢舉

抱歉 有另外附上了,測試別的預儲程序資料庫連接都沒有出錯想說可能不是這個問題,感謝大大答覆

BapAsleep iT邦新手 5 級 ‧ 2020-11-30 21:45:58 檢舉

echo $sql; 出現的是call grade_lv(,)
有看過大大的網址了
直接建立在Phpmyadmin預存程序功能的格式 是不是與網頁不太一樣(另外附上圖片)

BapAsleep iT邦新手 5 級 ‧ 2020-11-30 21:53:40 檢舉

https://ithelp.ithome.com.tw/upload/images/20201130/20133095RamuXUuaH0.jpg

BapAsleep iT邦新手 5 級 ‧ 2020-12-01 04:42:25 檢舉

不好意思 我自己試出來了
$sql="call grade_lv('$no_1','$subject')";
裡面的字符變數沒有加上單引號 (SQL語句)
還是感謝大大的回覆

問題解決就好

我要發表回答

立即登入回答