Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php postgresql不支持参数化查询_Php_Postgresql_Pdo - Fatal编程技术网

Php postgresql不支持参数化查询

Php postgresql不支持参数化查询,php,postgresql,pdo,Php,Postgresql,Pdo,我通过浏览谷歌没能找到答案。所以我决定在这里问。使用php pdo的postgre是否支持参数化查询 如果没有。我怎样才能达到同样的安全 注意安全,因此注射证明是绝对必须的。使用另一个数据库不能作为旁注 在对丰尼尼的回应中 参数化查询如下: $st = $db->prepare( "insert into vendors set first_name = :first_name, last_name = :last_name"

我通过浏览谷歌没能找到答案。所以我决定在这里问。使用php pdo的postgre是否支持参数化查询

如果没有。我怎样才能达到同样的安全

注意安全,因此注射证明是绝对必须的。使用另一个数据库不能作为旁注

在对丰尼尼的回应中

参数化查询如下:

     $st = $db->prepare(
         "insert into vendors set
         first_name = :first_name,
         last_name = :last_name"
     );
     $st->execute(array(
         ':first_name' => $vendor->first_name,
         ':last_name' => $vendor->last_name
     ));
$project = new Project();
$project->id = 'sequence string';
$project->projectName = 'A project name';

$project->saveProject();
不使用bindParam

这不适合我

我的代码如下所示:

     $st = $db->prepare(
         "insert into vendors set
         first_name = :first_name,
         last_name = :last_name"
     );
     $st->execute(array(
         ':first_name' => $vendor->first_name,
         ':last_name' => $vendor->last_name
     ));
$project = new Project();
$project->id = 'sequence string';
$project->projectName = 'A project name';

$project->saveProject();
在项目模型中:

public function saveProject() {
    $this->_db->query("INSERT INTO projects VALUES (:id,:projectName)", array(':id' => $this->_projectFields['id'], ':projectName' => $this->_projectFields['projectName']))->save();
}


my db类中的查询方法将查询放在private$\u查询字段中,将aray参数放在private$\u参数字段中。然后调用save方法,该方法准备语句,将$this->_查询作为参数提供给PDO::prepare(),然后调用PDO::execute,将$this->_参数作为参数提供给PDO::prepare()。这无法插入

是的,参数化查询与PHP PDO完美结合

$db = new PDO('pgsql:host=localhost;dbname=cars', 'user', 'password');

$cars = $db->prepare('SELECT * FROM cars WHERE id = :id');
$cars->bindParam(':id', $id = 20, PDO::PARAM_INT);
$cars->execute();

$result = $cars->fetch();
echo 'Name: ' . $result['name'];

有几种方法可以传递值,而不是用值的文本表示构建SQL语句

很可能是你在想什么

您还可以(“存储过程”)并将值作为参数提交


下面是一个相关问题的答案

为什么不呢?我不知道PDO,但PostgreSQL支持JDBC和ODBC中的参数化查询。因为如果我使用非参数化查询,它会插入数据,而使用参数化查询则不会。使用完全相同的数据。我用打印和回音验证过了。显示你的代码。问题出在您这边,而不是PostgreSQL。为什么不使用pg_query_params()?当您仅使用PostgreSQL时,PDO只是开销。只使用PHPI中的PostgreSQL函数不知道php中为postgre构建的标准函数,但我们总是在项目中使用PDO。这是标准。项目也会变得相当庞大,与android等其他平台进行交流。很好的发现,感谢链接。我明白你的想法,但我用我编辑的问题代码+1对于链接,您是否有错误或只是没有插入数据?save()方法不存在。save方法存在于我的数据库类中。我创造了它。我首先在dbhelper类中调用query方法,该方法设置一些变量,然后调用save(),以保存该数据。我没有发现错误,应用程序流按预期工作。它只是不插入数据。如果你读了我的编辑文章,我希望它会变得更清晰。你有没有尝试将这个参数添加到你的PDO对象中$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);没有,我没有。我会在星期一回来工作的时候做这件事。谢谢你指出这一点。希望这会有帮助。我现在不能再测试任何东西了。你确信这是可能的吗?如果没有bindParam方法,我打电话给一位同事让我访问工作服务器。查询中生成了错误。非常感谢。