来自WHERE的PHP SQL SELECT不起作用

时间:2014-04-30 22:24:54

标签: php mysql sql mysqli

我知道堆栈溢出已经完全涵盖了这一点,但我无法弄明白。我是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语句的代码在一个

有什么建议吗?

感谢。

5 个答案:

答案 0 :(得分:2)

你正在混合你的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'");
由于已建立数据库连接,因此不需要

。 (虽然我把它放在了最后)。

$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 Overview以获得进一步的帮助。

这些功能允许您访问MySQL数据库服务器。有关MySQL的更多信息,请访问»http://www.mysql.com/

可以在»http://dev.mysql.com/doc/找到MySQL的文档。


关于SQL注入:

您目前的代码向SQL injection开放。使用mysqli_*功能。 (我建议您使用prepared statementsPDO

答案 1 :(得分:0)

将所有mysql更改为mysqli;

echo之后添加分号,为while

添加大括号{和}

答案 2 :(得分:0)

在应该在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']
}

答案 3 :(得分:0)

好的,这里有很多小问题。

首先 mysql_query()的语法是:

mysql_query(query,connection)

所以连接应该是第二个参数。

在查询字符串中,你必须在你要比较的列周围放置``,如下所示:

WHERE `student_id` = '$studentid'
      ^here      ^and here

mysql_query() mysqli_fetch_array()无法协同工作。

mysql_query() mysql_fetch_array()
mysqli_query() mysqli_fetch_array ()

此行上有一个缺少的分号:

echo $row['first_name'] // <- here

同时检查 $ _ POST [&#39; student_id&#39;] 中的值是否是您期望的值。

这就是我现在所看到的。

答案 4 :(得分:0)

我发现使用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'];
}