Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SQL从不起作用的位置选择_Php_Mysql_Sql_Mysqli - Fatal编程技术网

PHP SQL从不起作用的位置选择

PHP SQL从不起作用的位置选择,php,mysql,sql,mysqli,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("U

我知道这是非常彻底的堆栈溢出覆盖,但我不能找出它。我完全不熟悉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并显示学生的名字,我将echo放在名为students的表中,但是我在页面上什么都没有,错误日志中也没有条目

student_id是上一个php页面上的列名称和输入字段名称

另外,我不知道这是否有区别,但是$connection到while语句的代码在一个代码中 有什么建议吗

谢谢。

将所有mysql更改为mysqli


在echo和大括号{和}后面加一个分号,当你混合MySQL API时,它们不会混合

如果您确实想使用mysql,请将mysqli\u fetch\u数组更改为mysql\u fetch\u数组_*

另外,在以下位置放置一些支撑:

while($row = mysql_fetch_array($result)) // missing brace
echo $row['first_name'] // <= missing semi-colon
此外,这里的DB连接是在末尾,而不是在开头:与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\u real\u escape\u stringstrip\u tags$\u POST['student\u id',$connection;如果您仍然热衷于使用基于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']
}
将错误报告添加到文件顶部,这将在生产测试期间有所帮助

error_reporting(E_ALL);
ini_set('display_errors', 1);
MySQL错误报告链接

然而 这里有一个完整的基于mysqli的方法:添加到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_*functions弃用注意事项:

从PHP5.5.0开始,此扩展就不推荐使用,不建议用于编写新代码,因为它将在将来被删除。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助

这些函数允许您访问MySQL数据库服务器。有关MySQL的更多信息,请访问»

MySQL的文档可以在»上找到

关于SQL注入:
您当前的代码对用户开放。使用函数。我建议您在while循环中应该执行的语句周围加上大括号。 我还建议您检查mysql\u real\u escape\u字符串,以避免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\u查询的语法是:

mysql_query(query,connection)
所以连接应该是第二个参数

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

WHERE `student_id` = '$studentid'
      ^here      ^and here
mysql\u查询和mysqli\u fetch\u数组不能一起工作

它可以是带有mysql\u fetch\u数组的mysql\u查询,也可以是带有mysqli\u fetch\u数组的mysqli\u查询

此行缺少分号:

echo $row['first_name'] // <- here
还要检查$\u POST['student\u 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'];
}

添加一些基本调试您正在混合您的MySQL API,它们不会混合。是的,基本上您不能像这样互换使用MySQL和mysqli函数。不要把它放在现场,这里有一个SQL注入漏洞。谢谢!!我是从你的信息中猜出来的。很有帮助,不客气。很高兴我能帮忙。如果可以的话,只要勾选白色的勾号,直到它变成绿色,我们就可以结束这个问题了。这会通知每个人,以便找到解决方案@dster77干杯