在我的测试机器上,查找用户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);