【问题标题】:Validating SQL query with PHP使用 PHP 验证 SQL 查询
【发布时间】:2010-11-26 00:57:39
【问题描述】:

验证似乎由于某种原因失败。通过验证,我的意思是“if ($result)”部分。如何正确验证 SQL 查询?

$dbconn = pg_connect("host=localhost port=5432 dbname=heoa user=heoa password=123");
$email  = $_POST['login']['email'];

$result = pg_query_params( $dbconn,
                'SELECT user_id
                FROM users
                WHERE email = $1',
                array( $email )
                );
if ($result)
{
        while ( $row = pg_fetch_array( $result ) )
        {
                $user_id = $row['user_id'];
        }
        return $user_id;
}

【问题讨论】:

    标签: php sql validation postgresql


    【解决方案1】:

    我怀疑返回值是整数零,在 if 语句中也被解释为 false。通过执行“if ($result !== FALSE)”(注意它应该是 !== 和 not !=),您将验证结果是否真的是不同于 FALSE 而不仅仅是 false...

    【讨论】:

    • 这不可能是正确的,因为根据文档,pg_query_params 返回查询结果资源成功或 FALSE 失败。这段代码是正确的,只是它应该调用pg_last_error() 以了解数据库在该查询中失败的原因。
    【解决方案2】:

    您是否应该在 SQL 查询中添加大约 1 美元的撇号,例如?

    SELECT user_id
    FROM users
    WHERE email = '$1'
    

    我不确定 PHP 如何扩展 $1 变量。

    【讨论】:

    • (a) PHP 不会扩展单引号字符串中的变量。 (b) 使用$1 参数是pg API 中的正确用法。 (c) 不要将查询参数放在引号中,因为它们会在 SQL 表达式中被解释为文字字符串,而不是参数。
    • 谢谢,我不确定。我至少五年没有编写过 PHP 页面了,所以如果你明白我的要点的话,我的锈迹就很深了
    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2020-08-18
    • 2012-10-30
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多