[英]PHP SQL SELECT from WHERE isn't working
我知道堆棧溢出已經完全涵蓋了這一點,但我無法弄明白。 我是PHP和SQL命令的新手,所以請耐心等待。
這是我的代碼:
$connection = mysql_connect($serverName, $userName, $password) or die('Unable to connect to Database host' . mysql_error());
$dbselect = mysql_select_db($dbname, $connection) or die("Unable to select database:$dbname" . mysql_error());
$studentid = $_POST['student_id'];
$result = mysql_query($connection,"SELECT `first_name` FROM `students` WHERE student_id = '$studentid'");
while($row = mysqli_fetch_array($result))
echo $row['first_name']
我確信這可能是非常愚蠢的事情。 我知道我應該使用mysqli或其他東西,但這只是一個測試項目,教我一些基礎知識。
student_id來自上一個php頁面,我想讓它查找student_id並顯示學生的名字,我從名為students的表中輸入echo,但我在頁面上什么都沒有,錯誤日志中沒有條目。
student_id既是列的名稱,也是前一個php頁面上輸入字段的名稱。
另外,我不知道它是否有所作為,但$ connection連接到while語句的代碼是一個
有什么建議么?
謝謝。
你正在混合你的MySQL API,他們“不”混合。
更改mysqli_fetch_array
到mysql_fetch_array
如果你真的想使用mysql_*
另外,還有一些支持:
while($row = mysql_fetch_array($result)) // missing brace
echo $row['first_name'] // <= missing semi-colon
和@ echo $row['first_name']
末尾的分號
while($row = mysql_fetch_array($result)){
echo $row['first_name'];
}
此外,您的數據庫連接在最后,而不是在開頭:與mysqli_*
方法不同,它首先出現。 使用mysql_
,連接結束。 如果你真的想使用mysqli_*
函數,那么你需要將所有mysql_
更改為mysqli_
(后面跟)。
$result = mysql_query($connection,"SELECT `first_name` FROM `students` WHERE student_id = '$studentid'");
因為已經建立了DB連接,所以這並不是真正需要的。 (盡管我把它放在了最后)。
$result = mysql_query("SELECT `first_name` FROM `students` WHERE student_id = '$studentid'",$connection);
另外,使用$studentid = mysql_real_escape_string(strip_tags($_POST['student_id']), $connection);
為了增加保護,如果你仍然熱衷於使用基於mysql_*
的函數。
將錯誤報告添加到文件頂部,這將有助於生產測試。
error_reporting(E_ALL);
ini_set('display_errors', 1);
MySQL(錯誤報告鏈接)
這是一個完整的基於mysqli_
的方法:將mysqli_real_escape_string()
添加到POST變量。
error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connection = mysqli_connect($serverName, $userName, $password, $dbname)
or die('Unable to connect to Database host' . mysqli_error());
$studentid = mysqli_real_escape_string($connection,$_POST['student_id']);
$result = mysqli_query($connection,"SELECT `first_name` FROM `students` WHERE student_id = '$studentid'");
while($row = mysqli_fetch_array($result)){
echo $row['first_name'];
}
從技術上講......
mysql_*
函數棄用通知:
http://www.php.net/manual/en/intro.mysql.php
此擴展自PHP 5.5.0起不推薦使用,不建議用於編寫新代碼,因為將來會刪除它。 相反,應該使用mysqli或PDO_MySQL擴展。 另請參閱MySQL API概述,以便在選擇MySQL API時獲得進一步的幫助。
這些函數允許您訪問MySQL數據庫服務器。 有關MySQL的更多信息,請訪問» http://www.mysql.com/ 。
有關MySQL的文檔,請訪問» http://dev.mysql.com/doc/ 。
將所有mysql
更改為mysqli
;
此外,您的后加分號echo
和大括號{和}為你while
在應該在while循環中執行的語句周圍添加花括號。 我還建議你查看mysql_real_escape_string,以避免SQL注入;-)而且你必須刪除mysqli中的i,因為你使用舊的MySQL函數。
$connection = mysql_connect($serverName, $userName, $password) or die('Unable to connect to Database host' . mysql_error());
$dbselect = mysql_select_db($dbname, $connection) or die("Unable to select database:$dbname" . mysql_error());
$studentid = $_POST['student_id'];
$result = mysql_query($connection,"SELECT `first_name` FROM `students` WHERE student_id = '$studentid'");
while($row = mysql_fetch_array($result)){
echo $row['first_name']
}
好的,這里有很多小問題。
首先mysql_query()的語法是:
mysql_query(query,connection)
所以連接應該是第二個參數。
在查詢字符串中,您必須在要比較的列周圍放置``,如下所示:
WHERE `student_id` = '$studentid'
^here ^and here
mysql_query()和mysqli_fetch_array()無法一起工作。
它是mysql_query()和mysql_fetch_array()
或mysqli_fery_array()的 mysqli_query () 。
這一行有一個缺少的分號:
echo $row['first_name'] // <- here
還要檢查來自$ _POST ['student_id']的值是否是您期望的值。
這就是我現在看到的。
我發現使用mysqli可以更快地連接並調出結果
$connection = new mysqli($serverName, $userName, $password, $databaseName)
if ($connection->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$studentid = $_POST['student_id'];
$sql = "SELECT `first_name` FROM `students` WHERE student_id = '$studentid'";
$results = $connection->query($sql);
如果你只是檢查一個學生,我會抓住一排
if($results->num_rows == 1){
$row = $results->fetch_assoc();
echo $row['first_name'];
}
如果你想抓住多個學生ID
while($row = $results->fetch_assoc()){
echo $row['first_name'];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.