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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

PHP
富國(guó)滬深 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);(在這個(gè)問(wèn)題中,我們不專注于mysql轉(zhuǎn)義,引用等)。一切都很好,我得到SELECT * FROM table WHERE `a`=aaa AND `b`=bbb但是,如果我們的第一個(gè)參數(shù)看起來(lái)像這樣:“?aa”,一切都會(huì)失?。篠ELECT * FROM table WHERE `a`=bbba AND `b`=?顯然,第一個(gè)替換傳遞將“a=?”更改為“a=?aa”,第二個(gè)傳遞將此(剛剛插入的)問(wèn)號(hào)更改為“bbb”。問(wèn)題是:我該如何繞過(guò)這種令人困惑的preg_replace行為?
查看完整描述

2 回答

?
婷婷同學(xué)_

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

您可以使用preg_replace_callback,每次更換一次使用一個(gè)項(xiàng)目。$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);


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

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

我不會(huì)用 或 這樣做。我會(huì)使用,所以空的返回可以被刪除(如果有空的刪除選項(xiàng),我會(huì)使用它)。因?yàn)樵谀抢镅h(huán)訪問(wèn)返回并添加值。您也可以用這個(gè)來(lái)引用這些值。我推測(cè)這樣做的目的是調(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);

然后,您的錯(cuò)誤日志將包含:


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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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