Php 用Postgresql更新

Php 用Postgresql更新,php,postgresql,Php,Postgresql,在我的一生中,我一直在使用它这么长时间,我已经做了很多有效的更新,但由于某些原因,它无法使用以下代码: 如果有人发现它有什么问题,请帮我解决。我有点卡住了: if (isset($_POST['membership'])){ $accTypeID = getAccTypeID($db, $_POST['membership']); $res = pg_query("SELECT * FROM accounts where username='" .$_SESSION['user

在我的一生中,我一直在使用它这么长时间,我已经做了很多有效的更新,但由于某些原因,它无法使用以下代码:

如果有人发现它有什么问题,请帮我解决。我有点卡住了:

if (isset($_POST['membership'])){

    $accTypeID = getAccTypeID($db, $_POST['membership']);
    $res = pg_query("SELECT * FROM accounts where username='" .$_SESSION['username']. "'");
    $rec = pg_fetch_row($res);
    if($res > 0){
        pg_query("UPDATE accounts SET paymentdate ='" .date("Y-m-d"). "', 
        accounttype_id=$accTypeID 
        WHERE username='" .$_SESSION['username']. "'");
        $p->addContent('Purchasing has succeeded.');
    }

}   
我在我的网站上运行这个,它说它可以工作,但当我检查我的数据库时,没有任何更新,我的控制台会产生以下错误:


pg_query():查询失败:错误:在“WHERE”处或附近出现语法错误\n第3行:WHERE username='anuj'

使用参数化查询。这里的问题是$accTypeID可能是空值或未定义。如果发生这种情况,则将用户名设置为“bob”或“true”将导致购买始终成功


始终使用参数化查询。它还将纠正类似的情况,因为undef应被视为
NULL
或至少
'

调试此类问题的第一步是打印生成的完整语句。在90%的情况下,您会立即注意到错误。您的
$accTypeId
可能是空的,这会导致WHERE前面的语法错误。您应该使用
pg_query_params
或类似的方法来正确处理参数,而不是在没有任何检查或引用的情况下注入参数。同意horsey,这通常是一种忘记包含空格或忽略平衡括号或右引号的情况。如果您切换到占位符而不是字符串插值和串联,您的代码将更可读,更不容易出错,…Aggh这是完全危险的,请阅读SQL注入