Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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 用数组数据替换“?”_Php_Pdo_Bdd - Fatal编程技术网

Php 用数组数据替换“?”

Php 用数组数据替换“?”,php,pdo,bdd,Php,Pdo,Bdd,我正在使用一个使用PDO来执行请求的软件。数据库请求如下所示: $query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?"; $data = array('152', 'DEL'); 我的问题是,我怎样才能得到整个请求?替换为$数据元素?我在查询后得到infos$query和$data,我只需要合并它。我必须做一个动态的东西,与2个参数或10个参数的请求一起工作 我希望得到的结果如下所示: "SELECT *

我正在使用一个使用PDO来执行请求的软件。数据库请求如下所示:

$query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?";
$data = array('152', 'DEL');
我的问题是,我怎样才能得到整个请求?替换为$数据元素?我在查询后得到infos$query和$data,我只需要合并它。我必须做一个动态的东西,与2个参数或10个参数的请求一起工作

我希望得到的结果如下所示:

"SELECT * FROM res_attachments WHERE res_id = '152' AND status = 'DEL'"
解决方案 对于那些有类似问题的人,以下是我提出的解决方案:

$query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?";
$data = array('152', 'DEL');
$tab = explode("?",$query);
for($i =0; $i < count($tab); $i++){
    $Request .= $tab[$i] . "'" . $data[$i] . "'";
    $finalRequest = str_replace('\'\'', '', $Request); // delete the double quote at the end
}
var_dump($finalRequest);

如果代码段中的$db是PDO的实例,那么您可以使用debugDumpParams查看SQL

如果代码段中的$db是PDO的实例,那么您可以使用debugDumpParams查看SQL

我希望这会对您有所帮助,请尝试一下

 $sth = $db->prepare('SELECT * FROM res_attachments WHERE res_id = ? AND status = ?');
    $sth->bindParam(1, $res_id, PDO::PARAM_INT);
    $sth->bindParam(2, $status, PDO::PARAM_STR);
    $sth->execute();


我希望这对你有帮助,试试这个

 $sth = $db->prepare('SELECT * FROM res_attachments WHERE res_id = ? AND status = ?');
    $sth->bindParam(1, $res_id, PDO::PARAM_INT);
    $sth->bindParam(2, $status, PDO::PARAM_STR);
    $sth->execute();


您需要的是准备然后执行,而不是查询

查询运行标准SQL语句,并要求您正确转义所有数据,以避免SQL注入和其他问题

这就是你想要的:

<?php

$query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?";
$data = array($res_id, $status);
$stmt = $db->prepare($query);
if($stmt->execute($data)){
    //fetch your results

}
?>
然后简单地使用debugDumpParams,它将准备好的语句所包含的信息直接转储到输出上。它将提供正在使用的SQL查询、使用的参数数量、参数、

<?php

$query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?";
$data = array($res_id, $status);
$stmt = $db->prepare($query);
if($stmt->execute($data)){
   $stmt->debugDumpParams();
}
?>

您需要的是准备然后执行,而不是查询

查询运行标准SQL语句,并要求您正确转义所有数据,以避免SQL注入和其他问题

这就是你想要的:

<?php

$query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?";
$data = array($res_id, $status);
$stmt = $db->prepare($query);
if($stmt->execute($data)){
    //fetch your results

}
?>
然后简单地使用debugDumpParams,它将准备好的语句所包含的信息直接转储到输出上。它将提供正在使用的SQL查询、使用的参数数量、参数、

<?php

$query = "SELECT * FROM res_attachments WHERE res_id = ? AND status = ?";
$data = array($res_id, $status);
$stmt = $db->prepare($query);
if($stmt->execute($data)){
   $stmt->debugDumpParams();
}
?>
尝试这种方法,我使用preg_replace_回调:

尝试这种方法,我使用preg_replace_回调:



Read more语句必须准备好将值绑定到它。查询用于执行不带绑定参数的查询。你会发现这些都在文件里。你的问题不清楚。请编辑并解释您所说的没有?-瞧,你的意思是没有WHERE子句吗?@Sloachrasher我编辑了我的问题:我认为迄今为止给出答案的人还没有完全理解这个问题。是的@Fred ii-,我已经更新了我的初始问题,使之尽可能清晰。我必须准备好更多的声明来约束它的价值观。查询用于执行不带绑定参数的查询。你会发现这些都在文件里。你的问题不清楚。请编辑并解释您所说的没有?-瞧,你的意思是没有WHERE子句吗?@Sloachrasher我编辑了我的问题:我认为目前给出答案的人还没有完全理解这个问题。是的@Fred ii-,我已经更新了我的初始问题,尽可能地清楚这不是我真正想要的。我已经更新了我最初的问题,可能不够清楚:/这个怎么样$q=$db->prepare'SELECT*FROM res\u attachments,其中res\u id=?和状态=?'$q->executearray$res\u id$status;我重新更新了我的初始问题,因为我不能修改查询的执行,我只是在一个数组中获取请求和参数。这不是我真正想要的。我已经更新了我最初的问题,可能不够清楚:/这个怎么样$q=$db->prepare'SELECT*FROM res\u attachments,其中res\u id=?和状态=?'$q->executearray$res\u id$status;我重新更新了我的初始问题,因为我不能修改查询的执行,我只是在一个数组中获取请求和参数。这不是我真正想要的。我已经更新了我的初始问题,可能不够清楚:/I我重新更新了我的初始问题,因为我无法修改查询的执行,我只是在array@Nathan30更新了我的答案是的,我知道了,谢谢。但是当我使用debugDumpParams时,我有arg的数量,但没有值。我不能用准备然后执行。请求使用查询,我只有字符串请求和参数数组。这不是我真正想要的。我已经更新了我的初始问题,可能不够清楚:/I我重新更新了我的初始问题,因为我无法修改查询的执行,我只是在array@Nathan30更新了我的答案是的,我知道了,谢谢。但是当我使用debugDumpParams时,我有arg的数量,但没有值。我不能用准备然后执行。请求使用查询,我只有字符串请求和参数数组
$index = -1;
echo preg_replace_callback(
    '/\?/',
    function () use ($data, &$index) {
        $index++;
        return "'{$data[$index]}'";
    },
    $query);