1

ここで何が問題になっていますか?私はテーブルのユーザーテーブルをうまく取得します。列名uidがそこにあることを確認しました。しかし、クエリからuidを取得しようとすると、何も返されません。テーブルが空なので、それで問題ありません。ただし、INSERT INTOを実行した後も、uidが戻ってこないため、INSERTINTOコマンドが機能しません。Postgres9.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 :(";
    }
}
4

2 に答える 2

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
}
于 2012-12-05T00:14:16.117 に答える
0

空のテーブルから始める場合、これは次のとおりです。

if (pg_num_rows($result)) 

常にfalseと評価されます。これは、常に新しいテーブルを作成しようとすることを意味します(テーブルが存在するため、トリガーとして失敗しますdie(pg_errormessage());

これはcheckForUserRow()、決して呼び出されないことを意味します。

呼び出されたとしても$dbconn、関数のスコープには存在しませんcheckForUserRow()。つまり、この関数でクエリが機能することはありません。

初歩的なデバッグとエラーメッセージの確認により、実行パスが正しく機能していないことがわかります。

また、このコード行は次のとおりです。

pg_close($conn);

DB接続の別の変数名を参照し、他の場所で使用されます。

于 2012-12-05T00:13:29.987 に答える