如何在 php psql 查询中使用表单变量?
How do I use a form variable in my php psql query?
基本上现在我有这个:
<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());
我想做的是从名为 "rod" 的用户那里获取一个号码,然后我想将其传递到我的 SQL 查询中,以便他们可以获得任何限制或号码他们想要的数据库中的行数 table。每当我执行此代码时,我都会收到此错误:
Parse error: syntax error, unexpected 'rod' (T_STRING) in C:\wamp\www\pgsqltest.php on line 107
很明显这是一个语法错误,但我不知道如何将变量实际传递给查询。每当我这样做时
echo $rod;
我收到一条错误消息
Undefined variable: rod
据我所知,表单名称不是实际变量。我将如何在我的 SQL 查询中使用用户输入?
这样做:
$查询="SELECT * FROM data.epf_logs LIMIT {$_POST['rod']};";
给我两个错误:
第一:
Notice: Undefined index: rod
第二个:
Warning: pg_query(): Query failed: ERROR: syntax error at or near ";" LINE 1: SELECT * FROM data.epf_logs LIMIT ; ^
php 问题:您需要在 {$_POST['rod']} 中转义单引号,即 {$_POST[\'rod\']} 或使用双引号整个 sql.
(但正如其他人所说,这不是你想让野外世界访问的东西)
我建议这样:
<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),检查 this and this 了解详情
我不保证这会奏效。只是一个指针。
基本上现在我有这个:
<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());
我想做的是从名为 "rod" 的用户那里获取一个号码,然后我想将其传递到我的 SQL 查询中,以便他们可以获得任何限制或号码他们想要的数据库中的行数 table。每当我执行此代码时,我都会收到此错误:
Parse error: syntax error, unexpected 'rod' (T_STRING) in C:\wamp\www\pgsqltest.php on line 107
很明显这是一个语法错误,但我不知道如何将变量实际传递给查询。每当我这样做时
echo $rod;
我收到一条错误消息
Undefined variable: rod
据我所知,表单名称不是实际变量。我将如何在我的 SQL 查询中使用用户输入?
这样做: $查询="SELECT * FROM data.epf_logs LIMIT {$_POST['rod']};";
给我两个错误: 第一:
Notice: Undefined index: rod
第二个:
Warning: pg_query(): Query failed: ERROR: syntax error at or near ";" LINE 1: SELECT * FROM data.epf_logs LIMIT ; ^
php 问题:您需要在 {$_POST['rod']} 中转义单引号,即 {$_POST[\'rod\']} 或使用双引号整个 sql.
(但正如其他人所说,这不是你想让野外世界访问的东西)
我建议这样:
<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),检查 this and this 了解详情
我不保证这会奏效。只是一个指针。