先不說SQL Injection,
我看到的錯誤訊息是說你mysqli_error()函式用法錯誤,
你要查一下mysqli_error()的用法,
修正之後再來找問題.
喔 那我整個理解錯方向一整下午..
老師說是主鍵問題..
所以我一直朝那方面去理解...
因為我看她錯誤顯示也是一列一列都有顯示出來..
指只是insert不進去的說...
就沒朝select去思考了!!
所以朝insert設定主鍵或是欄位錯誤去想想去思考好了..
先把錯誤的語法修正之後,
再來找原因吧.
好的..謝謝大大 !!
我又找錯方向了><
一個程式如果會出現PHP原生的錯誤訊息,
這個程式的本身就是有問題的.
連線成功
Notice: Undefined variable: mysqli in C:\xampp\htdocs\lhuregistrationX1\required.php on line 28
Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\lhuregistrationX1\required.php:28 Stack trace: #0 {main}thrown in C:\xampp\htdocs\lhuregistrationX1\required.php on line 28
經由大大提醒 系統通知問題點了..
這樣好像比較有目標問題點了...
可是還在理解中= =
Call to a member function query() on null??
這樣迴圈他找不到!?
SQL找的到PHP寫不進去..
還是我資料庫沒設定好主鍵設定!?
如果是用Windows,
應該是php.ini沒有載入mysqli,
其實很多時候你可以把錯誤訊息丟到google,
就可以找到答案了.
但是你的28行是不是變了?
應該是沒問題的..
"php.ini沒有載入mysqli,"
同資料庫...同樣設定...
所以可能向老師說得主鍵設定
關聯性 他沒辦法索引...
主鍵問題..
抓得出來 可是沒關聯性 好像無法做其他動作..
為什麼depaertment有重複的...
當初老師還有辦法把它設為主鍵!!?
其實我不知道為什麼需要指定主鍵,
也可以直接使用AUTO_INCREMENT讓他自己長就好.
AUTO_INCREMENT..了解
晚上來了解這個!!
好像不需要迴圈了
https://www.w3schools.com/sql/sql_autoincrement.asp
我試試看!! 謝謝大大!!
當程式執行結果不如預期
就會找原因
由於是 SQL 方面的問題
所以用 mysqli_error 看原因(或者線索)
而老師可能直接告訴你真正的原因
由於你的 mysqli_error 寫錯了
所以沒有發揮「提供錯誤原因線索」的功能
反而自己成為另一個錯誤
所以先解決 mysqli_error 的錯誤
就是
少傳一個參數
請看範例如下
// Perform a query, check for error
if (!mysqli_query($con,"INSERT INTO Persons (FirstName) VALUES ('Glenn')")) {
echo("Error description: " . mysqli_error($con));
}
好的..謝謝大大!!
又要理解一下了...
<?php
header('Content-Type: text/html; charset=utf-8');
@require 'config.inc.php';
//===============建立department資料表====================
$sql="
SELECT (@SN:=@SN+1) as id,required ,CASE required
WHEN '校必修' THEN 1
WHEN '校選修' THEN 2
WHEN '校選擇性必修' THEN 1
WHEN '系專業必修' THEN 1
WHEN '系專業選修' THEN 2
WHEN '系選擇性必修' THEN 1
WHEN '院專業必修' THEN 1
WHEN '院專業選修' THEN 2
WHEN '院必修' THEN 1
WHEN '院訂必修' THEN 1
ELSE 99
END requiredID FROM (SELECT required FROM allmatch GROUP BY required ORDER BY required ) as Dummy1,
(SELECT @SN:=0) as Dummy2 GROUP BY required
";
$result = mysqli_query($link_ID, $sql); //送出查詢
if (!$mysqli -> query("INSERT INTO required (`id`, `requiredID`, `name`) VALUES ('".$id."', '".$requiredID."' , '".$required."')")) {
echo("Error description: " . $mysqli -> error);
}
$required_index = mysqli_num_rows($result); //取得資料筆數
for ($index=0; $index < $required_index; $index++){
$requiredarr[$index] = mysqli_fetch_array($result); //將資料存進陣列
}
for ($index=0; $index < $required_index; $index++){
$id=$requiredarr[$index]['id'];
$re=$requiredarr[$index]['requiredID'];
$name=$requiredarr[$index]['required'];
$sql="INSERT INTO `required`(`id`, `re`, `name`) VALUES ('".$id."', '".$re."' , '".$name."')";
echo $sql.'<br/>';
if (!mysqli_query($link_ID, $sql)) {
echo 'Error: ' . mysqli_error();
}
}
?>
顯示錯誤是if那邊
連線成功
Notice: Undefined variable: mysqli in C:\xampp\htdocs\lhuregistrationX1\required.php on line 28
Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\lhuregistrationX1\required.php:28 Stack trace: #0 {main}thrown in C:\xampp\htdocs\lhuregistrationX1\required.php on line 28
call to member fuction on null ?
意思是找不到東西?
可是SQL找的到啊!!?
完蛋了 不知道問題點在哪..
靜下心來
把這篇看清楚
mysqli_query 有兩種寫法,一般是二選一if ($result = $mysqli -> query("SELECT * FROM Persons")) {
或是if ($result = mysqli_query($con, "SELECT * FROM Persons")) {
而你的程式
卻在裡面同時出現兩種寫法
比較快的答案
就是改成 mysqli_query 那種(不是 $mysqli -> query 那種)
$result = mysqli_query($link_ID, $sql); //送出查詢
if ($result = mysqli_query($link_ID, $sql)) {
echo "Returned rows are: " . mysqli_num_rows($result);
// Free result set
mysqli_free_result($result);
}
mysqli_close($link_ID);
$required_index = mysqli_num_rows($result); //取得資料筆數
連線成功Returned rows are: 10
Warning: mysqli_num_rows(): Couldn't fetch mysqli_result in C:\xampp\htdocs\lhuregistrationX1\required.php on line 46
PHP顯示第一個ID找的答案是10列
代表資料沒錯
為什麼到"$required_index = mysqli_num_rows($result);"的時候
警告:mysqli_num_rows(): 無法在 C:\xampp\htdocs\lhuregistrationX1\required.php 第 46 行獲取 mysqli_result..
因為主鍵的設定?沒辦法讓他有關聯性對吧!?
主鍵問題..
抓得出來 可是沒關聯性 好像無法做其他動作..
為什麼depaertment有重複的...
當初老師還有辦法把它設為主鍵!!?
在這裡就把 result set free
掉了
// Free result set
mysqli_free_result($result);
之後要再$required_index = mysqli_num_rows($result);
時
自然讀不到 $result 了
$result = mysqli_query($link_ID, $sql); //送出查詢
if ($result = mysqli_query($link_ID, $sql)) {
echo "Returned rows are: " . mysqli_num_rows($result);
// Free result set
// mysqli_free_result($result);
}
// mysqli_close($link_ID);
$required_index = mysqli_num_rows($result); //取得資料筆數
for ($index=0; $index < $required_index; $index++){
$requiredarr[$index] = mysqli_fetch_array($result); //將資料存進陣列
}
for ($index=0; $index < $required_index; $index++){
$id=$requiredarr[$index]['id'];
$re=$requiredarr[$index]['requiredID'];
$name=$requiredarr[$index]['required'];
$sql="INSERT INTO `required`(`id`, `re`, `name`) VALUES ('".$id."', '".$re."' , '".$name."')";
echo $sql.'<br/>';
if (!mysqli_query($link_ID, $sql)) {
echo 'Error: ' . mysqli_error();
}
}
PHP讀取時 系統顯示這裡錯誤 如圖 最下面兩行的IF語法
$sql="INSERT INTO `required`(`id`, `re`, `name`) VALUES ('".$id."', '".$re."' , '".$name."')";
echo $sql.'<br/>';
if (!mysqli_query($link_ID, $sql)) {
echo 'Error: ' . mysqli_error();
}
}
連線成功Returned rows are: 10INSERT INTO `required`(`id`, `re`, `name`) VALUES ('1', '1' , '校必修')
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\lhuregistrationX1\required.php on line 61
Error: INSERT INTO `required`(`id`, `re`, `name`) VALUES ('2', '2' , '校選修')
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\lhuregistrationX1\required.php on line 61
Error: INSERT INTO `required`(`id`, `re`, `name`) VALUES ('3', '1' , '校選擇性必修')
如圖我free關掉 close 也關掉了
mysqli_error() expects exactly 1 parameter, 0 given
這是我回答在上面的答案(mysqli_error())
證明
你根本沒看