PHP SQL从不起作用的位置选择
我知道这是非常彻底的堆栈溢出覆盖,但我不能找出它。我完全不熟悉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
$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干杯