PHP:在str_replace()中“...变量可以通过引用传递”?

问题描述 投票:21回答:3

我根据我在其他StackOverflow question中找到的内容创建了一个函数来打印带有变量的prepared-statement-sql-string。

这是我的代码:

foreach($params as $idx => $param) {
    if ($idx == 0) continue;
    $sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);

当我运行这个时,我得到:Fatal error: Only variables can be passed by reference为第3行。但是当我使用时

$sql = preg_replace('/\?/', "'" . $param . "'", $sql, 1);

对于第3行,它工作正常。

知道为什么吗?

php pass-by-reference str-replace
3个回答
35
投票

最后一个参数count通过引用传递。您可以在http://us.php.net/str_replace的描述中看到这一点,其中变量前面有一个&

这意味着你不能在那里使用文字1。你必须这样做:

$sql = str_replace('?', "'" . $param . "'", $sql, $count);
echo $count;

您现在将在屏幕上显示已更换的实例数。


2
投票

看看preg_replacestr_replace的文档,你会明白为什么。 str_replace的第四个论点必须通过引用传递,但preg_replace不是这种情况。


0
投票

我从VoteyDisciple重写

$sqlLogin = "SELECT * FROM users inner join role on users.roleId = role.id WHERE email=?1 and password=?2";
function makeSql() {
    $args = func_get_args();
    if(isset($args[1])) {
        $len = sizeof($args);
        //var_dump($args);
        $sql = $args[0];
        for ($index = 1; $index < $len; $index++) {
            $sql = str_replace('?'.strval($index), "'" . $args[$index] . "'", $sql);
        }
        return $sql;
    }
    return $args[0];
}
$sql = makeSql($sqlLogin, $myusername1, $mypassword);
$result = mysqli_query($con, $sql);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.