使用mysql_query函数从数据库获取信息

时间:2015-01-11 16:53:48

标签: php mysql

我正在尝试获取有关已登录用户的一些信息,因此我执行了 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行****中给出资源

2 个答案:

答案 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准备好的语句。 希望这可以帮助你