第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

preg_replace - 不要更換已更換的部件

preg_replace - 不要更換已更換的部件

PHP
富國滬深 2022-08-05 18:46:06
給定帶有占位符的 SQL 查詢:SELECT * FROM table WHERE `a`=? AND `b`=?和查詢參數(shù) ['aaa', 'bbb'],我想用相應(yīng)的參數(shù)替換 ?-占位符。所以,我這樣做:$sql = preg_replace(array_fill(0, count($params), '#\?#'), $params, $sql, 1);(在這個問題中,我們不專注于mysql轉(zhuǎn)義,引用等)。一切都很好,我得到SELECT * FROM table WHERE `a`=aaa AND `b`=bbb但是,如果我們的第一個參數(shù)看起來像這樣:“?aa”,一切都會失?。篠ELECT * FROM table WHERE `a`=bbba AND `b`=?顯然,第一個替換傳遞將“a=?”更改為“a=?aa”,第二個傳遞將此(剛剛插入的)問號更改為“bbb”。問題是:我該如何繞過這種令人困惑的preg_replace行為?
查看完整描述

2 回答

?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊

您可以使用preg_replace_callback,每次更換一次使用一個項目。$params


$sql = 'SELECT * FROM table WHERE `a`=? AND `b`=?';

var_dump('Original: ' . $sql);

$params=['aaa','bbb'];


$sql = preg_replace_callback("/\\?/",function($m) use (&$params) {

    return array_shift($params);

}, $sql);


var_dump('Result: ' . $sql);


查看完整回答
反對 回復(fù) 2022-08-05
?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗 獲得超5個贊

我不會用 或 這樣做。我會使用,所以空的返回可以被刪除(如果有空的刪除選項,我會使用它)。因為在那里循環(huán)訪問返回并添加值。您也可以用這個來引用這些值。我推測這樣做的目的是調(diào)試參數(shù)化查詢。preg_replacestr_replacepreg_splitexplode


$sql = 'SELECT * FROM table WHERE `a`=? AND `b`=?';

$v = array('1?1', "222");

$e = preg_split('/\?/', $sql, NULL, PREG_SPLIT_NO_EMPTY);

$c = '';

foreach($e as $k => $v1){

    $c .= $v1 . "'" . $v[$k] ."'"; 

}

error_log($c);

然后,您的錯誤日志將包含:


SELECT * FROM table WHERE `a`='1?1' AND `b`='222'


查看完整回答
反對 回復(fù) 2022-08-05
  • 2 回答
  • 0 關(guān)注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號