PHP dizi öğeleri ile yinelenen karakter değiştirin

5 Cevap php

Ben bu kör edici açıktır umut: Ben örneğin belirli bir dizideki elemanları ile bir dize yinelenen elemanını değiştirmek için en hızlı yol arıyorum SQL sorguları ve parametre değişimi için.

$query  = "SELECT * FROM a WHERE b = ? AND c = ?";
$params = array('bee', 'see');

İşte ben örneklerini değiştirmek istersiniz? böylece karşılık gelen sıralı dizi elemanları ile:

SELECT * FROM a WHERE b = 'bee' and c = 'see'

Ben bu preg_replace_callback kullanılarak yapılabilir diye görüyoruz, ama bu hızlı yoludur ya da ben belirgin bir şey eksik?

Edit: Ben zaten yukarıda elde hazırlanmış deyimleri kullanıyorum. Ben hata ayıklama çıkış parçası olarak göstermek için geri ham sorgu almak için bir yol arıyorum.

5 Cevap

Eğer prepared statements arıyorsunuz?

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

Ben de David Dorward zaten anlaşılacağı @ olarak PDO kullanarak öneriyoruz. Daha sonra:

$stmt = $dbh->prepare('SELECT * FROM a WHERE b = ? AND c = ?');
$stmt->execute(array('bee', 'see'));

Kullan PDO to do your SQL queries. Bu sorguları parametrelenmişse yapar, böylece kendi yöntemini rulo gerekmez.

Daha genel bir yöntem için, bkz: sprintf() (güvenli hale getirmek için veri kaçamaz, bu yüzden veritabanı erişimi için kullanmak değil ki).

Bir keresinde ben değiştirmelerin bu tür yapmanın şık bir yol olduğunu düşündüm kalıtsal bir kod temeli, içinde aşağıdaki bulundu:

function do_substitution($query, $params) {
    $params = array_unshift($params, $query);
    $query = call_user_func_array('sprintf', $params);

    return $query;
}

Tabii,% s,% d, vb işaretleri bu şekilde ikame edilir.

Diye sordu sonra bu yıl buldu. Başkasının diğer yanıtlar memnun görünümlü ve değil. Bu bunu yaparken kadar sona erdi nasıl:

echo preg_replace(array_fill(0,count($params),'/\?/'),$params,$query,1);

Not: Bu hata ayıklama için tamamen ve hiçbir veri temizleme yapar.

Eğer değerler etrafında herhangi bir tırnak eklemek için, her bir parametre için amaçlanan veri türü bilselerdi bu muhtemelen, genişletilmiş olabilir. Sqlsrv_query gibi bir şey ($ conn, $ sorgu, $ params) kullanırken bu otomatik olarak oluşturulur;