2012-12-05 107 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