2012-12-05 70 views
1

这里有什么问题?我得到的表适用于罚款。我确定列名称uid在那里。但是当我试图从查询中获得uid时,没有任何东西可以回来。这是很好的,因为表是空的。但是,我的INSERT INTO命令不起作用,因为在INSERT INTO之后,我仍然没有uid回来。使用Postgres 9.1.5。谢谢!Postgresql INSERT INTO使用PHP不工作

$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 :("; 
    } 
} 

回答

1

里面的功能,你需要得到全球$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 
} 
+0

就是这样。感谢使用变量作为params的额外提示。我是PHP新手,根本不理解范围 – user659488

0

如果你开始与一个空表,那么这样的:

if (pg_num_rows($result)) 

将始终评估为假。这意味着你将永远尝试创建一个新的表(因为表中存在触发die(pg_errormessage());将失败。

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

即使它被称为,$dbconn不在存在您checkForUserRow()功能的范围,这意味着不关你的查询将在该函数曾经工作。

初步调试和您的部分错误信息的审查将告诉您如何执行路径不能正常工作。

铝所以这行代码:

pg_close($conn); 

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

+0

这主要是它。代码在创建数据库后第一次调用checkForUserRow()。当你下一次浏览页面时,数据库就在那里。问题是局部变量vs全局变量。只要我把全局#dbonn放在checkForUserRow()中就行了!谢谢! – user659488