【发布时间】:2016-02-22 17:46:27
【问题描述】:
pg_fetch_array() 有以下问题,代码如下:
//Controllo utente
$u= "SELECT FROM utente WHERE idutente = '$username' and password= '$password'";
$result = pg_query($db,$u) or die(pg_last_error());
//Controllo query
if(!$result) {echo "problemi con la query"." ".$u;}
$tuplaUtente = pg_fetch_array($result);
//Numero di tuple
if($tuplaUtente === false) {echo "error fetch";}
else
{ echo $tuplaUtente['idutente'];
echo "else";
}
pg_close();
此代码仅显示“else”,尽管使用 PgAdmin,“$u”查询返回正确的结果。
事实上,如果我输入最后一个 else:
else
{
var_dump($tuplaUtente);
echo $u;
echo "else";
}
}
pg_close();
它显示“array(0) { } SELECT FROM utente WHERE idutente = 'usr' and password='pwd'else”。
【问题讨论】:
-
您正在检查
$tuplaUtente === false- 这是在检查$tuplaUtente是否为布尔假,而您的 var_dump 显示它不是 - 您得到的是一个空数组,而不是假的。我怀疑您的查询没有找到有效的结果,而不是失败。 -
尝试
echo pg_num_rows($result)验证是否有返回记录。 -
谢谢,我在这个模式下改变了 else:{ echo "else"." with number ".pg_num_rows($result)." ".$tuplautente['idutente'];它返回:“else with number 1”。
-
您的
SELECT后面应该有一个列列表,例如SELECT idutente FROM或SELECT * FROM。尽管我会假设您的代码在pg_query步骤中会失败,就像现在一样...... -
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。在这个简短的示例中,您有许多危险的SQL injection vulnerabilities 来自鲁莽地缺少proper escaping。当任何现代development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。
标签: php sql postgresql