0

编辑:代码已更改并已针对最新错误更新问题。

我需要使用查询从我的 postgreSQL 数据库中填充书名的下拉列表,SELECT title FROM books WHERE ownedBy = [users facebook ID]然后使用用户的选择来显示该书的其余信息。该页面是一个 facebook 应用程序,这就是我获取 facebook ID 的方式。

到目前为止,这是代码的相关部分,主要是根据我发现的类似问题的各种答案创建的。

<form action="updateform.php" method="post">
  <input type="hidden" name="userid" id="userid" value="<?php echo htmlspecialchars($user_id); ?>"
  <select name="booktitle" id="booktitle">
  <option>Select book</option>
  <?php
    $db = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432 dbname=d6fh4g6l0l6gvb user=zmqygfamcyvhsb password=1Apld4ivMXSK8JZ_8yL7FwIuuz sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());
    $sql = pg_query("SELECT title FROM books WHERE ownedby='$user_id'";
    while ($row = pg_fetch_assoc($sql)) {
    echo '<option value="'.htmlspecialchars($row['title']).'"></option>';}
    pg_close($db);
    ?>
    </select>
//other form elements here
</form>

目前,没有显示下拉框,服务器日志显示pg_query() expects parameter 1 to be resource, string given in /app/www/update.php on line 275pg_fetch_assoc 出现相同的错误

如果有人可以帮助我让下拉框部分工作,那现在很好,一旦这部分工作,我将自己解决其余部分。

4

4 回答 4

1

线

$sql = pg_query("SELECT title FROM books WHERE ownedby=("$user_id")");

包含一个错误,因为 $user_id 之前的双引号关闭了字符串 "SELECT .... 一个快速的解决方法是将 "$user_id" 更改为 '$user_id' 并删除大括号 ()

通常,将变量直接放入 SQL 查询中并不是一个好习惯,因为您的代码容易受到 SQL 注入的攻击。考虑使用准备、绑定和执行语句。

于 2013-03-27T17:26:20.413 回答
1

引号内未转义的引号

这个

$sql = pg_query("SELECT title FROM books WHERE ownedby=("$user_id")");

应该

$sql = pg_query("SELECT title FROM books WHERE ownedby='$user_id'");

或者

$sql = pg_query("SELECT title FROM books WHERE ownedby=\"$user_id\"");
于 2013-03-27T17:25:09.677 回答
1

尝试这个:

<form action="updateform.php" method="post">
<select name="bookTitle">
  <?php
        $db = pg_connect("host=ec2-54-243-190-226.compute-1.amazonaws.com port=5432 dbname=d6fh4g6l0l6gvb user=zmqygfamcyvhsb password=[removed] sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());
        $sql = pg_query(sprintf("SELECT title FROM books WHERE ownedby=%d", $user_id));
        while ($row = pg_fetch_assoc($sql)) {
            echo '<option value="'.htmlspecialchars($row['title']).'"></option>';
        }
        pg_close($db);
  ?>
</select>

注意使用 'echo' 而不是关闭 PHP 标记。

此外,您可能应该使用 ID,而不是选项值的标题 :)

问候,菲尔

于 2013-03-27T17:25:38.583 回答
0

您没有逃脱第 275 行的引号。应该是

$sql = pg_query("SELECT title FROM books WHERE ownedby=\"$user_id\"");

或者

$sql = pg_query('SELECT title FROM books WHERE ownedby="'.$user_id.'"');
于 2013-03-27T17:24:41.963 回答