A-AA+then

ช่วยดู code mysqli หน่อยครับ

3,979

ปัญหาคือ บนเครื่องที่บ้าน มันไม่มีปัญหาอะไรเลยครับ แต่พออัพบน เซอเวอร์ กับฟ้อง Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/prateep/domains/prateep.ac.th/public_html/includes/function.php on line 7 สอบถามเรื่อง ตัวแปร register_globals กับทาง เซอร์เวอร์ มันก็เป็น On แล้ว ไม่ทราบว่าเป็นอะไรครับ เซอร์เวอร์ใช้ Linux ครับ

ส่วนนี้เป็นไฟล์ชื่อ connect_db.php
<?php
$mysqli;           //  ตัวแปรสำหรับเชื่อมต่อฐานข้อมูล
$HostName = "localhost";    //  ชื่อเครื่อง Server ที่ให้บริการ
$UserName = "username";      // ชื่อผู้ใช้ สำหรับติดต่อ MySQL
$Password = "password123";       //  รหัสผ่าน สำหรับติดต่อ MySQL
$Database = "mydatabase";  //  ชื่อฐานข้อมูล
$port="3306";
// ฟังก์ชันสำหรับเชื่อมต่อฐานข้อมูล
function conn_db_func(){
 global $mysqli;
 global $HostName;
 global $UserName;
 global $Password;
 global $Database;
 $mysqli = mysqli_connect($HostName, $UserName, $Password, $Database,$port) or die("ไม่สามารถติดต่อกับ MySQL ได้");
 mysqli_query($mysqli, "SET NAMES utf-8");

}

// ฟังก์ชันสำหรับปิดการเชื่อมต่อฐานข้อมูล
function close_db_func(){
 global $mysqli;
 mysqli_close($mysqli);
}
?>

ส่วนนี้เป็นไฟล์ function.php

<? require("connect_db.php"); 

// ฟังก์ชันสำหรับ Select ข้อมูล
function select_data_func($sqlSelect){ // รับพารามิเตอร์เป็นคำสั่ง SQL สำหรับดึงข้อมูล
 global $mysqli;   // เรียกใช้ตัวแปร mysqli ที่ประกาศไว้ในไฟล์ "connect_db.php"
 conn_db_func();  // เรียกใช้ฟังก์ชัน conn_db_func() ที่อยู่ในไฟล์ "connect_db.php"
 $result = mysqli_query($mysqli, $sqlSelect) or die(mysqli_error()); // คิวรีฐานข้อมูล
 close_db_func();  // เรียกใช้ฟังก์ชัน close_db_func() ที่อยู่ในไฟล์ "connect_db.php"
 return $result;   // คืนค่าเป็น Object
}

// ฟังก์ชันสำหรับ Insert, Update และ Delete
function manage_data_func($sql){
 global $mysqli;
 conn_db_func();
 $result = mysqli_query($mysqli, $sql) or die(mysqli_error());
 $affect = mysqli_affected_rows($mysqli); // จำนวนแถวที่มีการเปลี่ยนแปลง
 close_db_func();
 return $affect;  // คืนค่าเป็นจำนวนแถวที่มีการเปลี่ยนแปลง, ค่า Default เป็น 0
}

// ฟังก์ชันสำหรับตรวจสอบข้อมูลก่อนที่จะ Insert
function insert_data_func($sqlSelect, $sqlInsert){
 global $mysqli;
 conn_db_func();
 $result_se = mysqli_query($mysqli, $sqlSelect) or die(mysqli_error()); // Select ข้อมูลว่าซ้ำหรือไม่
 $num_row = mysqli_num_rows($result_se);   // จำนวนแถวที่คิวรีได้
 if($num_row == 0){  // ถ้าไม่ซ้ำ จึงจะ Insert ข้อมูลได้
  $result_inst = mysqli_query($mysqli, $sqlInsert) or die(mysqli_error());
  $affect = mysqli_affected_rows($mysqli);
 }
 close_db_func();
 return $affect;
}

// ฟังก์ชันสำหรับ Insert โดยคืนค่า ID ที่ Insert ด้วย
function insert_returnid_func($sqlInsert, $sqlSelect){
 global $mysqli;
 conn_db_func();
 $result = mysqli_query($mysqli, $sqlInsert) or die(mysqli_error()); // Insert ข้อมูลก่อน
 $affect = mysqli_affected_rows($mysqli);
 if($affect > 0){  // ถ้า Insert ข้อมูลได้ จะคิวรี ID ของข้อมูลนั้น
  $result = mysqli_query($mysqli, $sqlSelect) or die(mysqli_error());
  close_db_func();
  return $result;  // คืนค่าเป็น ID ของข้อมูลที่ Insert
 }
}

// ฟังก์ชันสำหรับตรวจสอบข้อมูลที่จะ Delete
function delete_data_func($ID, $table, $field){  // คืนค่าเป็น true หรือ false เท่านั้น
 global $mysqli;
 conn_db_func();
 $sqlSelect = "SELECT * FROM $table WHERE $field = '$ID' ";
 $result = mysqli_query($mysqli, $sqlSelect) or die(mysqli_error()); // ตรวจสอบข้อมูลที่จะลบ
 $num_rows = mysqli_num_rows($result);
 if($num_rows == 0){
  close_db_func();
  return true;
 }elseif($num_rows > 0 ){ // ถ้ามีข้อมูล ก็จะลบข้อมูลนั้น
  $sqlDelete = "DELETE FROM $table WHERE $field = '$ID' ";
  $result = mysqli_query($mysqli, $sqlDelete) or die(mysqli_error());
  $affect = mysqli_affected_rows($mysqli);
  close_db_func();
  if($affect > 0){ return true; }else{ return false; }
 }else{
  return false;
 }
}

// ฟังก์ชันสำหรับกำหนด ID โดยอ่านค่าตัวเลขจากไฟล์
function gen_id_func($filename, $prefix){
 $fp = fopen($filename, "r");  // เปิดไฟล์เพื่ออ่าน
 $count = fgets($fp) + 1;   // นำค่ามาบวก
 fclose($fp);
  // ID มีความยาวจำนวน 6 ตัวอักษร, 2 ตัวแรก เป็นตัวอักษร ส่วน 4 ตัวหลังเป็นตัวเลข เช่น BP0001
 switch(strlen($count)){
  case 1 : $id = $prefix."000".$count; break;
  case 2 : $id = $prefix."00".$count; break;
  case 3 : $id = $prefix."0".$count;  break;
  case 4 : $id = $prefix.$count;   break;
 } 
 $fp = fopen($filename, "w");   // เปิดไฟล์เพื่อเขียน
 fwrite($fp, $count);
 fclose($fp);
 return $id;
}

// ฟังก์ชันสำหรับแปลงวันที่จากฐานข้อมูล (Date, DateTime, TimeStamp) มาแสดงแบบไทย
function convert_date_func($strDate, $mode, $type){
 $month_key = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12");
 $month_full = array("มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม");
 $month_short = array("ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค.");
 
 $dYear = substr($strDate,0,4);  // รูปแบบ Y-m-d H:i:s
 $dMonth = substr($strDate,5,2);
 $dDay = substr($strDate,8,2);
 if($dYear < 2550){ $dYear += 543; }
 switch($mode){
  case 'full':   // วันที่ 12 เดือนสิงหาคม พ.ศ. 2550
   $thMonth = array_combine($month_key, $month_full); 
   $new_date = "วันที่ ".$dDay." เดือน".$thMonth[$dMonth]." พ.ศ.".$dYear ;
  break;
  case 'short':   // 12 ส.ค. 50
   $thMonth = array_combine($month_key, $month_short);
   $new_date = $dDay." ".$thMonth[$dMonth]." ". substr($dYear,2,2);
  break;
  case 'digit':   // 12/08/2550
   $new_date = $dDay."/".$dMonth."/".$dYear;
  break;
 } 
 if($type == "datetime"){ // กรณีระบุเวลา
   $dTime = substr($strDate,11,8);
   $new_date = $new_date." ".$dTime." น.";
 }
 return $new_date;
}

// ฟังก์ชันสำหรับแสดงผลการทำงาน
function msg_func($title, $msg){
 $result  = "<table class='cssTable' align='center'>";
 $result .= "<tr class='cssTitle'><td>".$title."</td></tr>";
 $result .= "<tr class='cssContent cssFontMsg'><td align='center'>".$msg."</table>";
 return $result;
}

// แปลงตัวเลขเดือน เป็นชื่อเดือนภาษาไทย
function thaimonth_func($dMonth){
 switch($dMonth){
  case '01' : $tMonth = "มกราคม" ;  break;
  case '02' : $tMonth = "กุมภาพันธ์" ; break;
  case '03' : $tMonth = "มีนาคม" ;  break;
  case '04' : $tMonth = "เมษายน" ;  break;
  case '05' : $tMonth = "พฤษภาคม" ; break;
  case '06' : $tMonth = "มิถุนายน" ;  break;
  case '07' : $tMonth = "กรกฎาคม" ; break;
  case '08' : $tMonth = "สิงหาคม" ;  break;
  case '09' : $tMonth = "กันยายน" ;  break;
  case '10' : $tMonth = "ตุลาคม" ;  break;
  case '11' : $tMonth = "พฤศจิกายน" ; break;
  case '12' : $tMonth = "ธันวาคม" ;  break;
 }
 return $tMonth;
}

// ตัวแปรอะเรย์เก็บรายชื่อจังหวัด
$province = array(1 => "กระบี่", "กรุงเทพมหานคร", "กาญจนบุรี", "กาฬสินธุ์", "กำแพงเพชร", "ขอนแก่น", "จันทบุรี", "ฉะเชิงเทรา", "ชลบุรี", "ชัยนาท", "ชัยภูมิ", "ชุมพร", "เชียงราย", "เชียงใหม่", "ตรัง", "ตราด", "ตาก", "นครนายก", "นครปฐม", "นครพนม", "นครราชสีมา", "นครศรีธรรมราช", "นครสวรรค์", "นนทบุรี", "นราธิวาส", "น่าน", "บุรีรัมย์", "ปทุมธานี", "ประจวบคีรีขันธ์", "ปราจีนบุรี", "ปัตตานี", "พระนครศรีอยุธยา", "พะเยา", "พังงา", "พัทลุง", "พิจิตร", "พิษณุโลก", "เพชรบุรี", "เพชรบูรณ์", "แพร่", "ภูเก็ต", "มหาสารคาม", "มุกดาหาร", "แม่ฮ่องสอน", "ยโสธร", "ยะลา", "ร้อยเอ็ด", "ระนอง", "ระยอง", "ราชบุรี", "ลพบุรี", "ลำปาง", "ลำพูน", "เลย", "ศรีษะเกษ", "สกลนคร", "สงขลา", "สตูล", "สมุทรปราการ", "สมุทรสงคราม", "สมุทรสาคร", "สระแก้ว", "สระบุรี", "สิงห์บุรี", "สุโขทัย", "สุพรรณบุรี", "สุราษฏร์ธานี", "สุรินทร์", "หนองคาย", "หนองบัวลำพู", "อ่างทอง", "อำนาจเจริญ", "อุดรธานี", "อุตรดิสถ์", "อุทัยธานี", "อุบลราชธานี");  ?>

 

6 ความคิดเห็น

ลองตรวจดู pnpinfo() ครับ ว่าเปิด mysqli ไว้หรือเปล่า
1

ตรวจสอบแล้วครับ มันก็เปิดให้แล้วครับ
MysqlI Support enabled
Client API library version 5.0.67
Client API header version 5.0.67
MYSQLI_SOCKET /tmp/mysql.sock
MysqlI Support enabled
Client API library version 5.0.67
Client API header version 5.0.67
MYSQLI_SOCKET /tmp/mysql.sock

Directive Local Value Master Value
mysqli.default_host no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket no value no value
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.reconnect Off Off
MysqlI Support enabled
Client API library version 5.0.67
Client API header version 5.0.67
MYSQLI_SOCKET /tmp/mysql.sock
http://www.prateep.ac.th/test.php
2

บน server แจ้ง error บรรทัดที่ 17 ไม่รู้บรรทััดไหน ?

ลองตรวจสอบหลังจาก connect แล้ว ว่า $mysqli เป็น object หรือไม่

ลองใช้

@mysqli_query($mysqli, "SET NAMES utf8");
3

ช่วยแนะนำหน่อยครับ ว่า ให้ไปว่างไว้ตรงไหน ของโค๊ด หรือ ว่า ช่วงไหน หรือหลังเหตุการณ์ไหนครับ
และการตรวจสอบ ว่า $mysqli เป็น object ยังงัย
4

ตอนนี้ผมแก้ ที่บรรทัด 17 ของ connect_db แล้ว มันกลับไปฟ้อง ที่บันทัด 7 ของไฟล์ function ตามข้างล่างนี้ครับ

$result = mysqli_query($mysqli, $sqlSelect) or die(mysqli_error());// คิวรีฐานข้อมูล
และผมเปลี่ยน
 $mysqli = mysqli_connect($HostName, $UserName, $Password, $Database,$port) or die("ไม่สามารถติดต่อกับ MySQL ได้");
 @mysqli_query($mysqli, "SET NAMES utf8");
ที่อยู่ในไฟล์ connect_db แล้วด้วยครับ
5

ปกติเขาเขียนกันแบบนี้นะคับ ไม่เคยเห็น mysqli_query นะ

$db = new mysqli($HostName, $UserName, $Password, $Database,$port);
/* check connection */
if (mysqli_connect_errno()) {
    die("Unable to connect!");
}

เขาทำมาให้ใ้ช้เป็น object ก็น่าจะใช้ให้เต็มประสิทธิภาพหน่อยนะคับถ้าเขียนธรรมดา แนะนำเขียน mysql ธรรมดาดีกว่านะ
6
^