簡體   English   中英

來自WHERE的PHP SQL SELECT不起作用

[英]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_arraymysql_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起不推薦使用,不建議用於編寫新代碼,因為將來會刪除它。 相反,應該使用mysqliPDO_MySQL擴展。 另請參閱MySQL API概述,以便在選擇MySQL API時獲得進一步的幫助。

這些函數允許您訪問MySQL數據庫服務器。 有關MySQL的更多信息,請訪問» http://www.mysql.com/

有關MySQL的文檔,請訪問» http://dev.mysql.com/doc/


關於SQL注入:

您現在的代碼對SQL注入是開放的。 使用mysqli_*函數。 (我建議您使用並使用預先准備好的聲明PDO

將所有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM