Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > รบกวนขอคำแนะนำเกี่ยวกับmysqli_fetch_array และSQL JOIN



 

รบกวนขอคำแนะนำเกี่ยวกับmysqli_fetch_array และSQL JOIN

 



Topic : 134544



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์




คือข้อมูลเก็บที่2ตาราง
1.data_project ข้อมูลของโครงการที่ต้องการจะนำมาแสดง
2.data_participan เก็บid_project และ id(ของuser)

id_project เป็น primary key ของตารางdata_project
id เป็น primary key ของตารางที่เอาไว้เก็บข้อมูลส่วนตัวของผู้ใช้

ตารางdata_participan ถูกสร้างขึ้นมาเพื่อเอาไว้เก็บว่าผู้ใช้ลงทะเบียนในโครงการใดบ้าง
ทีนี้หนูคิดว่าปัญหาน่าจะอยู่ที่sqlที่หนูเขียน
$result = mysqli_query($conn,"select * data_participant where id = '$userid' RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project ");
แต่ก็พยายามดูจุดบกพร่องแล้วนะคะ เปรียบเทียบในเน็ต หาดูวิธีเขียนจากบทความ เนื่องจากว่าโปรเจคนี้เป็นโปรเจคแรกที่ใช้คำสั่งjoin มาเขียนในsql

หรือข้อผิดพลาดจะอยู่ mysqli_fetch_array($result); รึป่าวก็ไม่แน่ใจแต่ในใจลึกๆคิดว่าน่าจะบกพร่องที่$resultมากกว่า

นี้คือโค้ดที่มีปัญหาค่ะ MyJoinProject.php
<!DOCTYPE html">
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
<div class="content">
<?php  include "connect.php";  ?>	
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;}
return $str;}?>
<table>
<?php
session_start(); //รับค่าไอดียุเซอจากตอนล้อกอิน
echo $_SESSION['userid'];//รับค่าไอดียูสเซอจากตอนล้อกอิน2
$userid = $_SESSION['userid'];
$result = mysqli_query($conn,"select * data_participant RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project where id = '$userid' ");
	
$i=0; // กำหนดให้ตัวแปร i = 0
	   
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
$id_article[$i]['id_project'] = $row['id_project'];
$author[$i]['leader'] = $row['leader'];
$title[$i]['nameproject'] = $row['nameproject'];
$article[$i]['detail'] = $row['detail'];
       

echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";

echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
 }
?>
</table>

</div>
    </body>
</html>



ดัดแปลงมาจากโค้ดนี้ค่ะ เป็นโค้ดที่เอาไว้แสดงโครงงานทั้งหมดที่มีในตาราง
<!DOCTYPE html">
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
<div class="content">
<?php  include "connect.php";  ?>
	
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {
$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;
}
return $str;
}
?>

<table>
<?php

//$sql = "select * from data_project order by id_project DESC";

$result = mysqli_query($conn,'select * from data_project order by id_project DESC');
$num = mysqli_num_rows($result);//นับแถวทั้งหมดในตารางออกมา

$i=0; // กำหนดให้ตัวแปร i = 0
while($i < $num){ //ถ้า ตัวแปร i น้อยกว่า ตัวแปร num

$row = mysqli_fetch_array($result);
$id_article = $row['id_project'];
$author = $row['leader'];
$title = $row['nameproject'];
$article = $row['detail'];

echo "<tr>";
echo "<td>";

echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";

echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
}
?>
</table>

</div>
    </body>
</html>



----แจ้งเตือนที่ขึ้น----
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in H:\XAMMP\htdocs\_endprojectSW_OOP\MyJoinProject.php on line 25

ตารางที่เอาไว้เก็บข้อมูลโครงการ
ดาต้าโปรเจค

ตารางที่เอาไว้เก็บผู้ร่วมโครงการ เก็บไอดีโครงการ และ ไอดียูเซอร์ผู้ร่วมโครงการ
ร่วมโครงการ

อันนี้เป็นตัวอย่างเมื่อโค้ดMyJoinProjectสำเร็จค่ะ แสดงชื่อโครงการและรายละเอียดตัวอักษร300ตัว แสดงเฉพาะโครงการที่ยูเซอร์เข้าร่วม
เมื่อเขียนเสร็จ


พยายามมาหลายทางแล้วค่ะตอนแรกไม่ได้ใส่ลูปwhile แต่ใส่แล้วแจ้งเตือนก็ยังขึ้นเหมือนเดิมค่ะ ปรึกษาหลายคนแล้ว ลองแก้เองตามทางแก้ในเน็ตแล้วก็ยังไม่ได้ค่ะ ให้อาจารย์ช่วยดูให้อาจารย์ก็บอกว่าเท่าที่ดูSQLก็ไม่มีปัญหาอะไร แต่อาจารย์ยุ่งมากค่ะเลยยังแก้ไม่ได้ เลยอยากจะให้พี่ๆช่วยดูอีกแรงนึงค่ะ ว่าควรแก้อะไรตรงไหน เพราะดูทางแก้ทั้งเว็ปไทยเว็ปต่างประเทศก็ยังแก้ไม่ได้เลย



Tag : PHP, MySQL, Ms SQL Server 2016, jQuery, XAMPP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-11-23 21:45:10 By : TleCena View : 2890 Reply : 7
 

 

No. 1



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


https://www.thaicreate.com/php/forum/122967.html


Quote:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given


ก็แปลว่ามันได้ค่าที่เป็น boolean (true, false) มาแทนที่จะเป็นค่าของ mysqli_result (object).
ก็ต้องย้อนขึ้นไปบรรทัดบนๆดูว่าที่มาของ mysqli_fetch_array($result) ตัว $result นี่มาจากไหน?
มันมาจาก mysqli_query ก็เปิดดูเว็บอ้างอิงของ php.net ว่ามัน return อะไรออกมาบ้าง? มันออกมาทั้ง false, true, mysqli_result (object) ดังนั้น mysqli_fetch_array จะใช้ได้แค่เฉพาะเมื่อมีค่าแรกเป็น mysqli_result (object) ก็ต้องเอาค่านี้มาเช็คก่อนเรียก
อย่างเช่น

Code (PHP)
$result = mysqli_query($link, 'BLA BLA');// แก้ตัวแปร $link ให้ถูกต้องเอาเอง, BLA BLA คือสมมุติเฉยๆ
if (!is_object($result)) {
    die(mysqli_error($link));// แก้ตัวแปร $link ให้ถูกต้องเอาเอง
}


เพื่อให้มันแสดง error ออกมาให้จบๆไปไม่ต้องทำงานต่อเพราะผิดพลาด ปล่อยต่อไม่ได้. หรือใช้วิธี if ครอบก่อนเรียก mysqli_fetch_array เช่น

Code (PHP)
if (is_object($result)) {
    // mysqli_fetch_array($result); เรียกใช้ตรงนี้ในนี้
}



https://www.php.net/manual/en/mysqli-result.fetch-array.php
https://www.php.net/manual/en/mysqli.query.php
https://www.php.net/manual/en/mysqli.error.php








ประวัติการแก้ไข
2019-11-24 00:22:26
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 00:15:54 By : mr.v
 


 

No. 2



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบเพิ่มเติม จาก sql statement เดาว่า...
Code (SQL)
select * data_participant


น่าจะขาด FROM ไปนะ
Code (SQL)
// SELECT `columns` FROM `table`;
select * FROM data_participant


ยังไงก็อย่าลืมเก็บเกี่ยววิธี debug error ด้วยตัวเองอย่างที่บอกข้างบนด้วย มันจะทำให้ง่ายและไวกว่ามานั่งรอคำตอบจากคนอื่น เป็นประโยชน์กับตัวเองมากกว่า
แล้วก็การเขียนคำสั่ง sql เมื่อก่อนผมก็ไม่ได้สังเกตุหรอก แต่พบว่าการเน้นย้ำตัวใหญ่เล็กและการใช้ backtick (`) จะช่วยงานได้ดีกว่ามาก เพราะทำให้ดูง่ายว่าอะไรคือคำสั่ง อะไรคือชื่อตารางหรือคอลัมน์
ตัวอย่างเช่น
Code (SQL)
SELECT * FROM `table` WHERE `id` = 1 AND `name` LIKE '%someone%';

แบบนี้มันดูง่าย เวลาไล่อ่านหาข้อผิดพลาดจะเห็นได้เร็วมาก ถ้าเขียนตัวเล็กหมด (เมื่อก่อนผมก็ใช้แบบนั้น) มันจะลายตาไปหมด เวลาไล่หาข้อผิดพลาดแล้วมึนเอง.!?!
การใช้ backtick จะช่วยป้องกัน error จากการใช้คำสงวน (reserved words) ของ mysql ได้ด้วย


ประวัติการแก้ไข
2019-11-24 00:29:36
2019-11-24 00:31:01
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 00:25:52 By : mr.v
 

 

No. 3



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : mr.v เมื่อวันที่ 2019-11-24 00:25:52
รายละเอียดของการตอบ ::
ขอบพระคุณมากๆค่ะ ได้ผลยังไงเดี๋ยวตอนบ่ายมาอัพเดตให้ฟังนะคะ แต่ในโค้ดsql ที่มีการใช้join เนื่องจากว่าต้องการดึงข้อมูลมาจาก2ตาราง
คือดูในตารางdata_participan ว่าuser id คนนี้ลงทะเบียนโครงการไหนบ้าง โดยดูจากตัวแปร id_project ที่อยู่ข้างหน้าไอดียูสเซอร์
แล้วนำ id_project จากตารางdata_participan ไปเปรียบเทียบกับตารางdata_projectเพื่อดึงข้อมูลของโครงการที่มีเลข id_project นั้นออกมา

แบบนี้ต้องเขียนSQLแยกหรือคะ เพราะเท่าที่ดูตามเว็ปที่คอมเม้นไว้SQLนั้นไม่มีการใช้ JOIN พอดูอันที่มีJOINแล้วแก้ตามก็แก้ไม่ได้




ประวัติการแก้ไข
2019-11-24 01:19:46
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 01:11:08 By : TleCena
 


 

No. 4



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


ลองแก้ไขตามที่แนะนำแล้วนะคะมีแจ้งเตือนใหม่ขึ้นมาค่ะ

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'data_participant RIGHT JOIN data_project ON data_participant.id_project = data_p' at line 1

<!DOCTYPE html">
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
<div class="content">
<?php  include "connect.php";  ?>	
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;}
return $str;}?>
<table>
<?php
session_start(); //รับค่าไอดียุเซอจากตอนล้อกอิน
echo $_SESSION['userid'];//รับค่าไอดียูสเซอจากตอนล้อกอิน2
$userid = $_SESSION['userid'];
	
$result = mysqli_query($conn,"select * data_participant RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project where id = '$userid' ");
	
if (!is_object($result)) {
    die(mysqli_error($conn));// แก้ตัวแปร $link ให้ถูกต้องเอาเอง
}
	
$i=0; // กำหนดให้ตัวแปร i = 0
	   
if (is_object($result)) {
while($row = mysqli_fetch_array($result)) {
$id_article[$i]['id_project'] = $row['id_project'];
$author[$i]['leader'] = $row['leader'];
$title[$i]['nameproject'] = $row['nameproject'];
$article[$i]['detail'] = $row['detail'];
       

echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";

echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
 }}
?>
</table>

</div>
    </body>
</html>



มีปัญหาที่SQLจริงๆค่ะ ยังไงจะลองเช็คการเขียนSQLดูนะคะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 01:30:23 By : TleCena
 


 

No. 5



โพสกระทู้ ( 1,636 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

บันทัดที่ 21 ตามความเห็น 2 ที่ mr.v แนะนำครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 02:07:47 By : NewbiePHP
 


 

No. 6



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


https://www.thaicreate.com/php/forum/134544.html#00487934
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 08:53:18 By : mr.v
 


 

No. 7



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


แก้ได้เรียบร้อยแล้วค๊าาา ทำตามที่คุณ mr.v ขอบคุณ คุณNewbieXYZ ด้วยนะคะที่ช่วยมาย้ำเตือนอีกรอบ
โค้ดหลังแก้ไขค่ะ
<!DOCTYPE html">
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
<div class="content">
<?php  include "connect.php";  ?>	
<?php
function cutstr($str, $maxstr='', $holder='') {
if (strlen($str) > $maxstr) {$str = iconv_substr($str, 0, $maxstr, "UTF-8") . $holder;}
return $str;}?>
<table>
<?php
session_start(); //รับค่าไอดียุเซอจากตอนล้อกอิน
echo $_SESSION['userid'];//รับค่าไอดียูสเซอจากตอนล้อกอิน2
$userid = $_SESSION['userid'];
	
$result = mysqli_query($conn,"select * FROM data_participant RIGHT JOIN data_project ON data_participant.id_project = data_project.id_project where id = '$userid' ");
	
if (!is_object($result)) {
    die(mysqli_error($conn));// แก้ตัวแปร $link ให้ถูกต้องเอาเอง
}
	
$i=0; // กำหนดให้ตัวแปร i = 0
	   
if (is_object($result)) {
while($row = mysqli_fetch_array($result)) {
$id_article = $row['id_project'];
$author = $row['leader'];
$title = $row['nameproject'];
$article = $row['detail'];
       

echo "<tr>";
echo "<td>";
echo "<div id='title'><h2>
<a href='show_article_full.php?id_project=$id_article'>
$title
</a></h2></div>";
echo "<div id='detail'>".cutstr($article,'300','...')."</div>";
echo "<div id='float_r'>
<a href='show_article_full.php?id_project=$id_article'>
Read More>>
</a></div>";

echo "</td>";
echo "</tr>";
$i++; //ก็ให้บวกเพิ่มไปจนเท่ากับ ตัวแปร num
 }}
?>
</table>

</div>
    </body>
</html>


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-24 14:40:54 By : TleCena
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนขอคำแนะนำเกี่ยวกับmysqli_fetch_array และSQL JOIN
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่