iT邦幫忙

0

請問PHP接值+SQL查詢的問題【SQL菜鳥苦修中】

點進來的大神您好!
這是我的HTML
<.form method="POST" action="search_data.php">
...
<.input type="text" id="search-bar" name="user_input">
...
<.input type="submit" value="submit">
...
<./form>
以下是我的search_data.php

<.?php
$conn=new mysqli("localhost","root","willy10019","mystore");
if($conn->connect_error){
die("連線失敗".$conn->connect_error);
}else{
echo("Connect Sucess! ");
}
//備註:上面有連線成功 顯示Connect Sucess!

$user_input=$_POST["user_input"];
$sql = "SELECT user_order.*,
product.Product_name AS Product_name,
customer.Customer_name AS Customer_name,
customer.Customer_account AS Customer_account
FROM (user_order
JOIN customer
ON user_order.Customer_id=customer.Customer_id)
JOIN product ON user_order.Product_id=product.Product_id
WHERE customer.Customer_name='%$user_input%' or
customer.Customer_account='%$user_input%'
";

$result=$conn->query($sql);
$row=$result->fetch_assoc();
if($result->num_rows>0){
while($row)
echo "我找到東西了 買家是 ".$row["Customer_name"]." ";
}else{}
----------------我是結束的分隔線----------------
這是我的資料庫 ▼
資料庫mystore中有3個資料表 分別是user_order,customer,product
user_order的欄位有:Order_id、Customer_id、Product_id、amount、Order_date、Order_status
customer的欄位有:Customer_id、Customer_name、Customer_account、Customer_password、Customer_address
product的欄位有:Product_id、Product_name、Product_price
--------------我是充滿疑惑的分隔線--------------
想請教我的$row一直都抓不到東西
是不是SQL哪裡錯了呢
整天耗在這個問題上沒有進展ˊˋ

0
浩瀚星空
iT邦超人 1 級 ‧ 2020-11-05 21:37:31

你...找錯問題點了。問題不在你的sql語法。而是你的程式碼。

我不想講明,自已去查一下。
提示:

while($row) ????

$row=$result->fetch_assoc();???

我會跟你說這兩個點一定有問題,自已再去研究。

看更多先前的回應...收起先前的回應...

您是說無限迴圈的問題嗎?
不過目前是$row連東西都沒有
小弟連跑無限迴圈的機會都沒有啊XD

KYC iT邦新手 4 級 ‧ 2020-11-05 22:28:06 檢舉

Php office website example
這裡有範例供你參考(套用)

您是說無限迴圈的問題嗎?
不過目前是$row連東西都沒有
小弟連跑無限迴圈的機會都沒有啊XD

看樣子你的基礎一定很差。
居然第一眼就覺得是無限回圈。
不過你倒是沒說錯。連無限回圈也不會跑也沒錯。

先去看一下while的用法。
再看看 mysqli_fetch_assoc 的對應while的用法。

上面有人,提供官方的用法。
去看一下學一下。

要不然這麼明顯的錯誤不該沒注意到。

另外,可以的話。最好改學pdo的方式吧。
剛好你不是學用函式用法而是物件用法。
改成pdo的用法不會很難。

我是打算先寫好這個 再去弄另一個PDO的 兩個都學學
只是剛到這邊就卡住了
另外我看了一下其他幾位大大貼的連結 還有網路上的範例
while()大多都是包$result->fetch_assoc()
只是我把$row拿出來先定義了
所以我不太明白您說的點在哪裡0.0

前輩好,不好意思打擾了

WHERE customer.Customer_name='%$user_input%' or
customer.Customer_account='%$user_input%'

沒用過這樣的用法

請問='%$user_input%'的用意是??

其實mysqli是可以不需要學了。
直接學pdo就行了。
反正php7也不直接套入了。

這邊我用白話點的說法教你好了。

$result->fetch_assoc();

先問問你,你覺得上面這個指令是拿到什麼資料呢??
資料串還是??

其實這是拿到一筆資料。
這個指令做的事是將你目前的資料集,當前的指標記錄資料取出後,並跳下一筆。

而一般如下的寫法

while($row = $result->fetch_assoc()){
    $data[] = $row;
}

就是利用while的特性,加上 fetch_assoc 會自動下一筆的特性。
來達到連續取出資料。直到沒資料就停止。

說到這是否明白。
先聲明。這是基本一定要知道的東西。不要搞不清楚情況。
在不懂你使用函式的作用之前。不要隨便以為自已認為的東西。
要從最根本的方向找。不要用猜的。
學程式很忌所謂「用猜」問題。會搞死你自已。

archer9080

他不知道去哪抄的。單單依sql語法而言。是不可能用這樣的寫法。
一般這可能是一種字串取代法的方式。用程式去對應正確的參數後再生成正確的sql碼。可能他沒貼完全。所以你並沒看到後續的字串處理。

pdo有自已的字串對應方式了。可以不需要用到這招。

等於改成LIKE 後面有解決了 感謝archer9080

我是在猜
他是不是單純 LIKE 寫成 = ?

-----------更新-----------------
打字想太久又被搶先了@@

看起來是想依照輸入的值去找相似的

終於GET到大大的點了
while($row = $result->fetch_assoc()){
...
}
關於這段我知道$result->fetch_assoc()只會取一筆資料
只是因為SQL那邊一直卡住 加上菜鳥看到迴圈裡面條件一長串會有種煩躁感
所以我把它拿出來定義了
(實際上結果也應該只有一筆資料 所以我才直接把他丟出來)

archer9080
對 菜鳥SQL不熟練www
一個87問題卡一天找不到錯XDD
(留言好像沒辦法給你點最佳解答)

(實際上結果也應該只有一筆資料 所以我才直接把他丟出來)

你用了 LIKE 又用了 OR條件看起來是有顧客名字
怎能保證只有一筆?

因為這只是練習用的
所以我資料庫基本沒塞什麼東西
顧客只有5個人:)
本來預計後面會有個顧客有多筆的 只是還沒練到那裏

再多教你一招。like盡量少用。
它會造成全表搜尋。現在練習是ok。畢竟資料筆數少沒關係。
資料筆數很多用like的話。你會哭的。

0
ckp6250
iT邦研究生 2 級 ‧ 2020-11-06 05:02:43

您有買php+sql的書來練習嗎?
我建議初學者還是買本書,按書上的範例一一試做會比較有完整的概念,
網路上東抄西貼過於片面,適合老手,不適合新手。

看更多先前的回應...收起先前的回應...

有的 有買一本 只是看得霧煞煞 又在網路上找教學輔助
只是最近聽人說"聽君一席話 勝讀十年書"的道理
才想說找人討論一下

ckp6250 iT邦研究生 2 級 ‧ 2020-11-06 21:02:22 檢舉

【聽君一席話,勝讀十年書】您可能誤解了一半。
先讀十年書,再聽一席話,方能有益,
否則,沒有基礎物理學概念,
就算聽了愛因斯坦十席話,有何幫助呢?

我是建議,買個五~十本,按照書上的範例一條一條做,
先打好基礎。

我不是來討論哲學的

ckp6250 iT邦研究生 2 級 ‧ 2020-11-07 17:09:13 檢舉

是我多嘴了!

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-06 07:14:30

這段裡的範例程式碼看懂(沒幾列,跟你寫的數量差不多)
然後拿去改成你要的

感謝大神 上次也有逛到這個
大致上都能看懂了=)

我要發表回答

立即登入回答