如何在php psql查询中使用表单变量?

时间:2016-01-20 15:21:24

标签: php jquery postgresql user-input

所以基本上现在我有这个:

  
<form action="pgsqltest.php" method="get">
    How many rows of data?: <input type="number" name="rod"><br>
    <input type="submit">
</form>

<?php
require_once('C:\wamp\www\pgsqlconnect.php');

    $query = 'SELECT * FROM db.logs;';
    $result = pg_query($query) or die('Query failed: ' . pg_last_error());

    $query = 'SELECT * FROM db.logs LIMIT {$_POST['rod']};';
    $result = pg_query($query) or die('Query failed: ' . pg_last_error());

我尝试做的是从名为&#34; rod&#34;的用户那里获取一个号码,然后我想将它传递给我的SQL查询,以便他们可以获得任何限制或数量他们想要的数据库表中的行。每当我执行此代码时,我都会收到此错误:

  

Parse error: syntax error, unexpected 'rod' (T_STRING) in C:\wamp\www\pgsqltest.php on line 107

很明显,这是一个语法错误,但我无法弄清楚如何将变量实际传递给查询。每当我做的时候

 echo $rod;

我收到错误说

  

Undefined variable: rod

我所知道的是,表单名称不是实际变量。我如何将用户输入用于我的SQL查询?

这样做:    $ query =&#34; SELECT * FROM data.epf_logs LIMIT {$ _POST [&#39; rod&#39;]};&#34 ;;

给了我两个错误:  第一:

 Notice: Undefined index: rod   

第二

 Warning: pg_query(): Query failed: ERROR: syntax error at or near &quot;;&quot; LINE 1: SELECT * FROM data.epf_logs LIMIT ; ^

2 个答案:

答案 0 :(得分:1)

我建议这样的事情:

<form action="pgsqltest.php" method="get">
    How many rows of data?: <input type="number" name="rod" />
    <br />
    <input type="submit" name="submit" /> <!-- Add a name to allow us to check if sent -->
</form>

在您的提交中添加了一个名称以进行检查

//Setup the connection
$conn = pg_connect("host=sheep port=5432 dbname=mary user=lamb password=foo");

require_once('C:\wamp\www\pgsqlconnect.php');
//Check if POST has been sent
if (isset($_POST['submit']))
{

    $query = "SELECT * FROM db.logs;";
    //Use connection in all pg_* function calls
    $result = pg_query($conn, $query) or die('Query failed: ' . pg_last_error());

    //Set rod to be an int of 0 if not set or a safe vause of $_POST['rod'] if set
    $rod = (int)(isset($_POST['rod']) ? pg_escape_string($conn, $_POST['rod']) : 0);
    $query = "SELECT * FROM db.logs LIMIT {$rod};";
    $result = pg_query($conn, $query) or die('Query failed: ' . pg_last_error());
}

我在php.net上看到,pg_ *功能按顺序有2个参数,$connection_string$query,因此必须使用连接(IMO),检查thisthis了解详情

我不会保证这会工作。只是一个指针。

答案 1 :(得分:0)

php问题:你需要在{$ _POST ['rod']}中转义单引号,即{$ _POST [\'rod \']}或在整个sql周围使用双引号。

(但正如其他人所说,这不是你想让野外世界接触到的东西)