如何从数据库中检索资源?

时间:2017-11-20 06:44:53

标签: php mysql

我正在制作自己的测试应用程序,并想要一个登录页面。当用户通过凭据时,它应该是 echo Success 。 但我没有成功。

所以,首先,我想与你们分享我的代码。请看看。

<?php
define ('DB_HOST', '127.0.0.1');
define ('DB_NAME', 'sqltest');
define ('DB_USER', 'sqltest');
define ('DB_PASSWORD', 'sqltest');

$conn=mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ("failed to connect to db". mysql_error());

$db=mysql_select_db (DB_NAME, $conn) or die ("failed to connect to db". mysql_error());

$v1=@$_POST['username'];

$v2=@$_POST['password'];

$query = "SELECT Username, Password FROM userinfo WHERE username=".'$v1'. "AND password=.'$v2'."; 
$v3 = mysql_query($query);

if ($v3 === true){
    echo "success".$query;
}

else {
    echo "failed";
}?>

因此,您可以看到带有变量的MySQL查询,并将其传递给 mysql_query 进行初始化。该查询将检查数据库中的用户凭据($ v1,$ v2)。如果找到用户凭证,则成功将在显示屏上回显,否则失败。

但我只在屏幕上看到失败。那是什么原因?我知道网上有很多代码,但我想要自己的代码

查询是否正确?或其他东西。

我知道我的PHP代码中存在很多错误。这就是我来这里的原因。

请澄清说明。

谢谢,等待.....

3 个答案:

答案 0 :(得分:1)

你的字符串引用是错误的。这是更正的行:

        SCNBox *Box = [SCNBox boxWithWidth:6.0 height:6.0 length:6.0 chamferRadius:Radius];
        boxNode = [SCNNode nodeWithGeometry:Box];
        [arr addObject:boxNode];
        [Box setMaterials:arr];

mysql_query在成功时不返回true,但在失败时返回false,因此您还需要将此行更正为:

$query = "SELECT `username`, `password` FROM userinfo WHERE `username` = '$v1' AND `password` = '$v2'";

顺便说一下:

  • 您的代码存在错误的SQL注入漏洞,所以我真的希望您不打算在真实的网站中使用它
  • mysql_ *函数已弃用,因此您不应编写依赖于它们的新代码。

答案 1 :(得分:1)

试试这个:

<?php
define ('DB_HOST', '127.0.0.1');
define ('DB_NAME', 'sqltest');
define ('DB_USER', 'sqltest');
define ('DB_PASSWORD', 'sqltest');

$conn=mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ("failed to connect to db". mysql_error());

$db=mysql_select_db (DB_NAME, $conn) or die ("failed to connect to db". mysql_error());

$v1=@$_POST['username'];

$v2=@$_POST['password'];

$query = "SELECT Username, Password FROM userinfo WHERE username='$v1' AND password='$v2'"; 
$v3 = mysql_query($query);

if ($v3){
    echo "success";
}

else {
    echo "failed";
} ?>

答案 2 :(得分:1)

当PHP变量在双引号字符串中时,它将被视为变量,并且将使用它的值。但是当变量在单引号内时,变量将被视为字符串,而不是变量,因此不会被解析,也不会使用它的值。

所以而不是:

$query = "SELECT Username, Password FROM userinfo WHERE username=".'$v1'. "AND password=.'$v2'."; 

那些$v1'$v2'将不会被解析,因为它们在单引号字符串中你应该有:

$query = "SELECT Username, Password FROM userinfo WHERE username='".$v1."' AND password='".$v2."'"; 

其中变量不在字符串中。请注意,单引号将移动到双引号字符串。或者甚至喜欢这样:

$query = "SELECT Username, Password FROM userinfo WHERE username='$v1' AND password='$v2'"; 

其中$v1$v2位于双引号字符串中,因此它们将被解析。不要在双引号内单引号混淆。只有第一个用过 - 第二个只是一个共同的角色。因此,在我的上一个示例中,$v1$v2位于双引号字符串中,单引号只是属于该字符串的字符。

当然,考虑一下sql注入,并且至少要先将用户收集的值转义为sql:

$query = "SELECT Username, Password FROM userinfo WHERE username='".addslashes($v1)."' AND password='".addslashes($v2)."'";