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


No getting result from query on host database

在我的测试机器上,查找用户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没有经验,但这在逻辑上对我来说没有意义。

应该使用mysqli_query。请确保更改$link与连接结果(mysqli_connect)。

代码:

$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++;
}

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

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

SQL语言的查询,应该这样写:

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

您将确保至少有一个结果,并且当您调用"*"时,它将显示整个相关行。所以你真的不需要一个参数,因为密码应该是唯一的每个人。(理论).

在另一种情况下,尝试再添加一个列,并将其命名为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)
);"

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

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

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