iT邦幫忙

0

抱歉是初學者..有點sql的 select語法需要幫忙!!

https://ithelp.ithome.com.tw/upload/images/20210617/20131917yAJpRyjal0.jpg

https://ithelp.ithome.com.tw/upload/images/20210617/20131917oRbvK0iLnY.jpg

https://ithelp.ithome.com.tw/upload/images/20210617/20131917c6cNvsNUhZ.jpg

<?php
	header('Content-Type: text/html; charset=utf-8');
	@require 'config.inc.php';
	//===============建立course資料表====================
	$sql="SELECT a.courseID, a.coursename ,a.required,r.name,r.id ,r.required from allmatch a,required r where a.required = r.name group by a.courseID";
	$result = mysqli_query($link_ID, $sql); //送出查詢
	$course_index = mysqli_num_rows($result); //取得資料筆數
	for ($index=0; $index < $course_index; $index++){ 
		$coursearr[$index] =  mysqli_fetch_array($result);	 //將資料存進陣列
	}
	for ($index=0; $index < $course_index; $index++){ 
		$id=$coursearr[$index]['a.courseID'];
		$name=$coursearr[$index]['a.coursename'];
		$rid=$coursearr[$index]['r.id'];
		$sql="INSERT INTO `course`(`id`, `name`, `rid`) VALUES ('".$id."',  '".$name."',  '".$rid."')";
		echo $sql.'<br/>';
		if (!mysqli_query($link_ID, $sql)) {
			echo 'Error: ' . mysqli_error();
		}
	}

?>

如圖 抱歉是初學者..
資料應該可以寫進course..
但是還是顯示錯誤
連線成功
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\lhuregistrationX1\course.php on line 7

所以想請有沒有大大修正一下!!
或是我的想法錯誤了!!抱歉...麻煩糾正指教一下!!

目前是前兩欄都可以..只是要加一欄requiredID就近不去了
由第一圖的requird去判別第二圖的name
然後資料送回去該列的requiredID
再送給迴圈寫進去第三張圖..
這邊卡住了

所以現在小人不知道是判別出問題 還是寫進去出問題(因為裡面有個null空值)

0
rogeryao
iT邦大師 1 級 ‧ 2021-06-17 10:52:34
SELECT a.courseID, a.coursename ,a.required,r.name,r.id ,r.required 
from allmatch a,required r 
where a.required = r.name 
group by a.courseID

1.放到 phpMyAdmin 執行看看。
2.group by 目的是什麼?

sky800219 iT邦新手 5 級 ‧ 2021-06-17 11:44:01 檢舉

不是視為群組嗎....

rogeryao iT邦大師 1 級 ‧ 2021-06-17 12:16:01 檢舉

1.放到 phpMyAdmin 執行結果是什麼 ?
2.請參閱 : GROUP BY 敘述句 (SQL GROUP BY Statement)

不確定你的需求是什麼,或許你可以改成

SELECT distinct a.courseID, a.coursename ,a.required,r.name,r.id ,r.required 
from allmatch a,required r 
where a.required = r.name 
sky800219 iT邦新手 5 級 ‧ 2021-06-17 12:48:54 檢舉

一樣不能耶...

0
japhenchen
iT邦大師 1 級 ‧ 2021-06-17 10:53:57

murmur....如果是新手,建議不要用xampp這類包裝系統下手為妙,看是要用wsl2或虛擬機入手,我不喜歡在windows上跑php/mySQL,畢竟不是原生環境
另,PHP跟MYSQL都已經到8.0了,你還停留在5.x版的世界...以後程式會沒辦法移植到新的環境上跑,改會改到昏倒

sky800219 iT邦新手 5 級 ‧ 2021-06-17 11:45:56 檢舉

抱歉 因為是專題檔案做修改的..
但是最下面的course的id跟name我都會從最上面allmatch抓過去
但是最後required要比對..就不會比對了..

0
wrxue
iT邦研究生 3 級 ‧ 2021-06-17 11:02:22

根據文獻

Returns false on failure. For successful queries which produce a result set, such as SELECT, SHOW, DESCRIBE or EXPLAIN, mysqli_query() will return a mysqli_result object. For other successful queries, mysqli_query() will return true.

若執行失敗會回傳 falseSELECT 成功會回傳mysqli_result 物件。

你的錯誤訊息說 $result 是一個布林值,代表 mysqli_query 並沒有執行成功(因此回傳 false),所以你應該看一下 SELECT 哪裡錯了。

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\lhuregistrationX1\course.php on line 7

因此先判斷是否成功,再繼續做接下來的事情

if(! $result){
    //這裡做執行成功後的事情
}

另外不建議使用字串相接來合成 SQL 語句,當然你也表明你是初學,所以我猜你應該不會知道 SQL 注入的嚴重性,但有時間一定要了解一下,並知道如何避免。可以參考 [Tool] 滲透利器 - SQL Injection 合成語句即時顯示器

sky800219 iT邦新手 5 級 ‧ 2021-06-17 11:47:06 檢舉

好的 抱歉還是學生..
檔案修改試試看..
但是只會同樣欄位的轉移過去卻不會比對資料表..

1

說真的,你的問題只是單純的資料庫連結失敗。這當然無論下任何SQL語法都會發生錯誤。
問題點你抓錯了。並不是SQL語法的問題。

正常因該還要有類似

$link_ID=mysqli_connect("localhost","root","123456","DB"); 

這樣的東西存在才對。不過並沒看到的話,我只能猜測你寫在config.inc下。

你得先確定 mysqli_connect 是否成功,再來討論SQL語法的問題。

看更多先前的回應...收起先前的回應...
sky800219 iT邦新手 5 級 ‧ 2021-06-17 17:18:03 檢舉
<?php 


    //System setting area

		//Database connection
			$cfg_db_location = 	"127.0.0.1";			//Database location
			$cfg_db_user =		"test";					//Database username
			$cfg_db_password = 	"----------";						//Database password
			$cfg_db_database =	"----------";			//Database name
		//Site setting
			$cfg_title = 		"ZZZ;		//Project Chinese title
			$cfg_title_en = 	"ZZZ";		//Project English title


	//System default setting

		//Default web title
		$project_title = $cfg_title. " " .$cfg_title_en; 

		//Database connection condition
		$link_ID = new mysqli($cfg_db_location, $cfg_db_user, $cfg_db_password, $cfg_db_database);


	//System default execution
		$link_ID->query("SET NAMES 'utf8'");

		if ($link_ID->connect_error) {
			die("連線失敗: " . $link_ID->connect_error);
		}
		echo "連線成功";

?>

給大大看一下...
上圖是config.inc 只是我沒PO出來而已..
帳號密碼等等設定都正確..
同時連此檔案目前是可以的
但是只有相同ID跟name過得去

sky800219 iT邦新手 5 級 ‧ 2021-06-17 17:26:49 檢舉

目前是前兩欄都可以..只是要加一欄requiredID就近不去了
由第一圖的requird去判別第二圖的name
然後資料送回去該列的requiredID
再送給迴圈寫進去第三張圖..
這邊卡住了

所以現在小人不知道是判別出問題 還是寫進去出問題(因為裡面有個null空值)

freshman iT邦新手 5 級 ‧ 2021-06-17 21:55:40 檢舉

$cfg_title = "ZZZ; 是不是少打一個",這樣會出錯吧

sky800219 iT邦新手 5 級 ‧ 2021-06-17 23:41:09 檢舉

喔 那是我PO上來再改的 因為有一些文字不好露白才打XXX
只是那時候手物...
原本檔案室有的

唉~~你初學也程度低也就算了。連發個問題也不好好發。

先指點你幾個問題

1.你的DB物件是採用 物件模式的,其後就盡量使用物件導向的方式來處理你的語法。雖然用函式也沒差也沒錯。

2.不要用FOR來跑SQL,這很危險的。

3.好好的看你的錯誤訊息,學會如何輸出錯誤。

4.好好的打好你要發問的程式碼。不要讓其它大大們,找到不該找的BUG

最後在指點你一下,目前我看起來我推測是重覆KEY的問題。
只是你沒注意看錯誤訊息。又講的「不搭不七」的。
我只好通靈來檢查你的可能問題了。

你的 course 中的ID可能是唯一值。
所以並不允許你有重覆的KEY值。

所以第一次可以正常。第二次ID有衝突重覆了。當然給你報錯了。

sky800219 iT邦新手 5 級 ‧ 2021-06-18 11:44:07 檢舉

好的 謝謝指教..
以後會注意發文詢問各位大大的..

SELECT (@SN:=@SN+1) as id,if(required LIKE "%必%","1","2")as required,required as name FROM (SELECT required FROM allmatch GROUP BY required ORDER BY required DESC LIMIT 20) as Dummy1, (SELECT @SN:=0) as Dummy2 

慢慢一張一張搞定!!
終於早上各位的建言 跟看其他教學...
學會
去分析總表並新增欄位 且數字1或2
然後依照select的資訊給編碼..
依照名稱給於名稱

已經會撈資料了 下午要開始來學怎麼寫進資料庫內了!!

不錯,不過再指點你一下。
如果可以,反正你是初學。最好還是學用PDO的方式。

我要發表回答

立即登入回答