没有从主机数据库查询得到结果

时间:2014-03-15 01:47:51

标签: php mysql sql login

在我的测试机器上查找用户last_name和id的查询工作正常。我无法弄清楚为什么它不适用于我的主机。

对于此表

students(
id VARCHAR(5) NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
grade SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);

我运行此查询并没有问题。

$sql="SELECT * FROM $tbl_name WHERE last_name ='$myusername' and id ='$mypassword'";
$result = @mysqli_query ($dbc, $sql);

mysqli_close($dbc);

if(!is_object($result) || $result->num_rows != 1) 
{
 $errors[] = 'No entries found, maybe capitalize your last name.';
}
else
{
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    $_SESSION['username'] = $_POST['username'];  //last name
    $_SESSION['firstName'] = $row['first_name'] ;
}

但是在主机上,结果中没有行。

但是,我运行了这组代码并显示了所有条目。为什么查询不起作用?

 $sql="SELECT * FROM $tbl_name";
 $num_results = mysqli_num_rows($result);

  for ($i=0; $i<$num_results; $i++) 
  {
      $row = mysqli_fetch_assoc ($result);
      print stripslashes($row['last_name'])." ".stripslashes($row['id']);
  }

顺便说一下,用户名是姓氏,密码是他们的ID。我不熟悉PHP和MySql,但这在逻辑上对我没有意义。

3 个答案:

答案 0 :(得分:1)

应该使用mysqli_query。 请务必使用连接结果(mysqli_connect)更改$link

<强>代码:

$sql = "SELECT * FROM $tbl_name";
$result = mysqli_query($link, $sql);
$num_results = mysqli_num_rows($result);

$i = 0;
while ($row = mysqli_fetch_assoc ($result)) {
    print stripslashes($row['last_name'])." ".stripslashes($row['id']);
    $i++;
}

答案 1 :(得分:0)

我不确定,但我认为您使用了错误的语言来处理mysql主机,例如循环不应该是SQL语言。据我所知,这看起来像C或C ++(它可能取决于你目前使用的是什么类型的数据库)。

但您需要知道的是,使用此查询,您需要知道确切的名称和确切的密码。为了以防万一,请这样做。

SQL语言中的查询应该按照以下方式编写:

SELECT * FROM students WHERE last_name = "ifyouknowit" OR password="ifyouknowit";

您确定至少会有一个结果,当您调用&#34;时,它会显示整个相关行。 *&#34;。所以你并不需要一个参数,因为密码应该是每个人都独一无二的。(理论上)。

在另一种情况下,尝试添加一个列并将其命名为USERID或类似的东西,以设置唯一的引用号码。所以你一定不要在两个名字和名字很容易混淆的人之间混淆。

另外,请务必正确使用关于名称的写法语法(如大写字母在某种程度上很重要)。

我还注意到您在此表中没有任何密码列。它存放在哪里?无论如何,通过此查询,您仍然会有结果。

"students(
id VARCHAR(5) NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(40) NOT NULL,
grade SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);"

您应该从存储的位置调用密码数据库。提供关于其他表的更多信息,然后我将为您编写完整的查询。

答案 2 :(得分:0)

此代码正在清除变量值,因此查询中没有搜索任何内容。我认为这是应该使用的标准代码,显然不是。

//prohibit sql injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);