iT邦幫忙

0

Uncaught mysqli_sql_exception 問題

各位大大好,我想用使用表單取得使用者想設定的WHERE條件,再利用php抓取MySQL裡的資料顯示在網頁上,並且設定每30筆資料為一頁。第一頁資料正常無錯誤訊息,但是其他頁數會出現Fatal error: Uncaught mysqli_sql_exception 錯誤訊息,並且同時出現Undefined variable($result_c1、$result_c2、$result_c3)的警告,一直無法解決,請問各位大大該如何解決?以下是我的程式碼,感謝各位大大!!

	<?php
		
		$result_c1 = $_POST["req1"]; //取得表單資料
		echo "$result_c1";
	
		$result_c2 = $_POST["req2"]; //取得表單資料
		echo "$result_c2";
	
		$result_c3 = $_POST["req3"]; //取得表單資料
		if($result_c2 != "LIKE"){
			$result_c3 = $result_c3;
		} else {
			$result_c3 = "%$result_c3%";
		}
		echo "$result_c3";		
		
		echo '<a href="choose_test1.html"><button name="back">重設搜尋條件</button></a>';
	
	

		// 定義資料庫資訊
		$DB_NAME = "mydb"; // 資料庫名稱
		$DB_USER = "root"; // 資料庫管理帳號
		$DB_PASS = "**********"; // 資料庫管理密碼
		$DB_HOST = "localhost"; // 資料庫位址
	
		// 連接 MySQL 資料庫伺服器
		$con = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS);
		if (empty($con)) {
			print mysqli_error($con);
			die("資料庫連接失敗!");
			exit;
		}

		// 選取資料庫
		if (!mysqli_select_db($con, $DB_NAME)) {
			die("選取資料庫失敗!");
		} else {
			/*echo "連接 " . $DB_NAME . " 資料庫成功!<br>";*/
		}

		// 設定連線編碼
		mysqli_query($con, "SET NAMES 'utf8mb3'");
	
		// 取得資料
		$sql = "SELECT ROW_NUMBER() OVER(ORDER BY `產品編號`),`產品編號`,`品名規格`,`單位`,`倉庫編號`,`倉庫名稱`,`儲位`,`現有庫存` FROM `c0105_t` WHERE `$result_c1` $result_c2 '$result_c3'";
		$result = mysqli_query($con, $sql);

	
	
		$data_nums = mysqli_num_rows($result); //統計總比數
		$per = 30; //每頁顯示項目數量
		$pages = ceil($data_nums/$per); //取得不小於值的下一個整數
		if (!isset($_GET["page"])){ //假如$_GET["page"]未設置
			$page=1; //則在此設定起始頁數
		} else {
			$page = intval($_GET["page"]); //確認頁數只能夠是數值資料
		}
		$start = ($page-1)*$per; //每一頁開始的資料序號
		$result = mysqli_query($con,$sql.' LIMIT '.$start.', '.$per) or die("Error");

	
		
		echo '<table border="1">';
			echo '<tr>
					<th>資料編號</th>
					<th>產品編號</th>
					<th>品名規格</th>
					<th>單位</th>
					<th>倉庫編號</th>
					<th>倉庫名稱</th>
					<th>儲位</th>
					<th>現有庫存</th>
				</tr>';
	
		while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
			$i = 0;
			$n = 0;	
			while ( $i <= 3 ) {
				echo '<tr>';
				while ($n <= 7) {
					echo "<td>$row[$i]</td>";
					$i++;
					$n++;
				}
				echo '</tr>';
			}
		}
		echo '</table>';

		
		
		//分頁頁碼
		echo '共 '.$data_nums.' 筆-在 '.$page.' 頁-共 '.$pages.' 頁';
		echo "<br /><a href=?page=1>首頁</a> ";
		echo "第 ";
		for( $i=1 ; $i<=$pages ; $i++ ) {
			if ( $page-3 < $i && $i < $page+3 ) {
				echo "<a href=?page=".$i.">".$i."</a> ";
			}
		} 
		echo " 頁 <a href=?page=".$pages.">末頁</a><br /><br />";
		
	
	
		// 釋放記憶體
		mysqli_free_result($result);

		// 關閉連線
		mysqli_close($con);

	?>

看更多先前的討論...收起先前的討論...
Felix iT邦新手 3 級 ‧ 2022-01-13 17:42:12 檢舉
MySQL 有 ROW_NUMBER 函數?
謝謝您,我學MySQL不久,所以也不太確定,但是把ROW_NUMBER() OVER(ORDER BY `產品編號`) 刪掉不做排序也會出現一樣的錯誤訊息
Felix iT邦新手 3 級 ‧ 2022-01-14 19:36:09 檢舉
這是因為程式執行到 SQL 前就出錯了。
請問大大,是POST那邊寫錯了嗎?但是第一頁資料能正常執行蠻神奇的@@

1 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2022-01-13 22:08:41

這篇寫 try catch
大概如下

try {
  checkNum(2);
  //If the exception is thrown, this text will not be shown
  echo 'If you see this, the number is 1 or below';
}

//catch exception
catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
}

可以知道沒有 handle 的 exception 到底是什麼原因
才可對症下藥

謝謝您,我試試看您的方法,感謝!

我要發表回答

立即登入回答