使用PHP插入Postgresql无效

使用PHP插入Postgresql无效,php,sql,postgresql,Php,Sql,Postgresql,这里怎么了?我把桌子收拾得很好。我已经确定列名uid在那里。但是,当我试图从查询中获取UID时,什么都没有得到。那很好,因为桌子是空的。但是,我的INSERT INTO命令不起作用,因为在INSERT INTO之后,我仍然没有返回UID。使用Postgres 9.1.5。谢谢 $query = "SELECT * FROM information_schema.tables WHERE table_name = 'usertable';"; $result = pg_query($dbconn,

这里怎么了?我把桌子收拾得很好。我已经确定列名uid在那里。但是,当我试图从查询中获取UID时,什么都没有得到。那很好,因为桌子是空的。但是,我的INSERT INTO命令不起作用,因为在INSERT INTO之后,我仍然没有返回UID。使用Postgres 9.1.5。谢谢

$query = "SELECT * FROM information_schema.tables WHERE table_name = 'usertable';";
$result = pg_query($dbconn, $query);

if (pg_num_rows($result)) 
{
    echo "Table exists<br>";
    checkForUserRow();
}
else
{
   echo "Error on query, attempting to create table<br>";
   $sql = "CREATE TABLE usertable (uid integer PRIMARY KEY, sign varchar(255));";
   pg_query($dbconn, $sql) or die(pg_errormessage());

   $result = pg_query($dbconn,$query);
   if (pg_num_rows($result)) {
       echo "Table created<br>";
       checkForUserRow();
   }
}

pg_close($conn);

function checkForUserRow()
{
    $query = "SELECT uid FROM usertable WHERE uid = '123'";
    $result = pg_query($dbconn, $query);

if(pg_num_rows($result)) 
{
    echo "User DB row exists<br>";
}
else
{
    echo "User row does not exist - attempt to add user to table<br/>";

    $sql = "INSERT INTO usertable (uid) VALUES('123')";
    pg_query($dbconn, $sql);

    $result = pg_query($dbconn, $query);
    if (pg_num_rows($result)) 
    {
        echo "User successfully added!<br/>";
        }
    else
    {
        echo "User not added :(";
    }
}
$query=“从信息_schema.tables中选择*,其中table_name='usertable';”;
$result=pg_query($dbconn,$query);
if(pg_num_行($result))
{
echo“表存在
”; checkForUserRow(); } 其他的 { echo“查询出错,试图创建表
”; $sql=“CREATE TABLE usertable(uid integer主键,符号varchar(255));”; pg_query($dbconn,$sql)或die(pg_errormessage()); $result=pg_query($dbconn,$query); if(pg_num_行($result)){ 回显“创建的表
”; checkForUserRow(); } } pg_关闭(康涅狄格州); 函数checkForUserRow() { $query=“从usertable中选择uid,其中uid='123'; $result=pg_query($dbconn,$query); if(pg_num_行($result)) { echo“用户数据库行存在
”; } 其他的 { echo“用户行不存在-尝试将用户添加到表
”; $sql=“插入用户表(uid)值('123')”; pg_查询($dbconn,$sql); $result=pg_query($dbconn,$query); if(pg_num_行($result)) { echo“用户已成功添加!
”; } 其他的 { echo“未添加用户:(”; } }
如果您从一个空表开始,那么:

if (pg_num_rows($result)) 
将始终计算为false。这意味着您将始终尝试创建一个新表(由于存在触发
die(pg_errormessage());
,该操作将失败

这意味着永远不会调用
checkForUserRow()

即使调用了它,
$dbconn
也不存在于
checkForUserRow()
函数的作用域中,这意味着您的任何查询都不会在此函数中工作

对您的错误消息进行初步调试和检查将向您展示执行路径如何无法正常工作

此外,这一行代码:

pg_close($conn);

为DB连接引用一个不同的变量名,然后在其他地方使用。

如果以空表开始,则:

if (pg_num_rows($result)) 
将始终计算为false。这意味着您将始终尝试创建一个新表(由于存在触发
die(pg_errormessage());
,该操作将失败

这意味着永远不会调用
checkForUserRow()

即使调用了它,
$dbconn
也不存在于
checkForUserRow()
函数的作用域中,这意味着您的任何查询都不会在此函数中工作

对您的错误消息进行初步调试和检查将向您展示执行路径如何无法正常工作

此外,这一行代码:

pg_close($conn);

为数据库连接引用一个不同的变量名,然后在其他地方使用。

在函数中,您需要获取全局的
$dbconn

function checkForUserRow()
{
    global $dbconn;
    // everything else
}
这是因为当您在函数内部执行
pg_query($dbconn,$query);
时,它使用的是$dbconn的本地版本,该版本不存在

如果愿意,还可以选择将$dbconn作为参数传入:

function checkForUserRow($dbconn)
{
    // global $dbconn; // Don't need this anymore.
    // everything else
}

在函数内部,需要获取全局
$dbconn

function checkForUserRow()
{
    global $dbconn;
    // everything else
}
这是因为当您在函数内部执行
pg_query($dbconn,$query);
时,它使用的是$dbconn的本地版本,该版本不存在

如果愿意,还可以选择将$dbconn作为参数传入:

function checkForUserRow($dbconn)
{
    // global $dbconn; // Don't need this anymore.
    // everything else
}

主要是这样。代码在创建数据库后的第一次调用checkForUserRow()。下次加载页面时,数据库就在那里。问题是局部变量与全局变量。我在checkForUserRow()中放入全局#dbonn后,它就起作用了!谢谢!主要是这样。代码调用的是checkForUserRow()创建数据库后的第一次。下一次加载页面时,数据库就在那里。问题是局部变量与全局变量。我在checkForUserRow()中放入全局#dbonn后它成功了!谢谢!就是这样。谢谢你给我额外的提示,让我把vars用作参数。我是PHP新手,根本不了解作用域。就是这样。谢谢你给我额外的提示,让我把vars用作参数。我是PHP新手,根本不了解作用域