Php PG_FETCH_ARRAY()不返回任何数据
我对pg_fetch_数组有以下问题,代码如下:Php PG_FETCH_ARRAY()不返回任何数据,php,sql,postgresql,Php,Sql,Postgresql,我对pg_fetch_数组有以下问题,代码如下: //Controllo utente $u= "SELECT FROM utente WHERE idutente = '$username' and password= '$password'"; $result = pg_query($db,$u) or die(pg_last_error());
//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
{
var_dump($tuplaUtente);
echo $u;
echo "else";
}
}
pg_close();
它显示数组0{}SELECT FROM-ute,其中idutete='usr'和password='pwd'else。此查询:
SELECT FROM utente WHERE idutente = '$username' and password= '$password'
不返回任何列,正如@Jerrad所评论的
这在PostgreSQL 9.4之前是无效的SQL,但从那时起允许使用,请参见:
E.7.3.3。询问
[……]
允许选择具有空的目标列表
由于缺少任何输出列,pg_fetch_数组返回的数组是空的:结果本身有一行,但没有列
这显然是查询中的一个错误:给定代码的其余部分,它至少应该在SELECT之后有idute列。您正在检查$tuplaUtente===false-这是检查$tuplaUtente是否是布尔false,而var_转储显示它不是-您得到的是一个空数组,而不是false。我怀疑您的查询没有找到有效的结果,而不是失败。请尝试echo pg_num_rows$result验证是否有返回的记录。谢谢,我已在此模式下更改了else:{echo else.with number.pg_num_rows$result..$tuplautente['idutene'];}它返回:else,数字为1。在选择之后应该有一个列列表,如SELECT idutente FROM或SELECT*FROM。尽管我假设您的代码在pg_查询步骤中失败,但现在是这样……警告:编写自己的访问控制层并不容易,而且有很多机会会出现严重错误。在本书中举个例子,你有很多危险的东西都是因为你轻率的缺乏安全性。请不要编写你自己的身份验证系统,因为任何现代的类似系统都有一个强大的内置系统。