我正在尝试获取有关已登录用户的一些信息,因此我执行了 echo 测试:
<?php
include("config.php");
mysql_connect($hostname, $db_user, $db_pass);
mysql_select_db($db_name);
$myusername=$_POST['myusername'];
$sql = mysql_query("SELECT point FROM members WHERE username = '$myusername'");
$res = mysql_query($sql) or die(mysql_error());
while ($row=mysql_array($res))
{
echo "<br>";
echo "Points: ".$row['point'];
echo " - ";
echo "Username: ". $row['username'];
}
session_start();
if (!isset($_SESSION['myusername']))
{
header("location:login.php");
}
?>
我甚至不知道出了什么问题。我希望登录用户看到他的点,从数据库中的行中获取。相反,我看到了错误:
警告:mysql_query()期望参数1为字符串,第15行****中给出资源
答案 0 :(得分:2)
您正在拨打mysql_query()
两次。 mysql_query需要一个字符串参数,并且您将从第一次调用返回的资源参数提供给第二次调用。
更改此
$sql = mysql_query("SELECT point FROM members WHERE username = '$myusername'");
$res = mysql_query($sql) or die(mysql_error());
到
$sql = "SELECT point FROM members WHERE username = '$myusername'";
$res = mysql_query($sql) or die(mysql_error());
另一个错误是您使用的是mysql_array()
而不是mysql_fetch_array()
。在开发过程中,通过在脚本顶部添加以下两行来启用错误报告始终是最佳做法。
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start()
应尽可能最早地在您的脚本顶部调用。
您的脚本具有很高的SQL注入攻击能力。 You should think of re-writing your script to prevent SQL injection
答案 1 :(得分:0)
替换
while ($row=mysql_array($res)) {
与
while ($row=mysql_fetch_array($res)) {
使用以下代码
<?php
include("config.php");
mysql_connect($hostname, $db_user, $db_pass);
mysql_select_db($db_name);
$myusername=$_POST['myusername'];
$sql = mysql_query("SELECT point FROM members WHERE username = '$myusername'");
$res = mysql_query($sql) or die(mysql_error());
while ($row=mysql_fetch_array($res)) {
echo "<br>";
echo "Points: ".$row['point'];
echo " - ";
echo "Username: ". $row['username'];
}
session_start();
if (!isset($_SESSION['myusername'])){
header("location:login.php");
}
?>
另外请不要使用mysql_*
函数,而是使用mysqli_*
或PDO准备好的语句。
希望这可以帮助你