«LIKE» поиск имени столбца с использованием Laravel [duplicate]

Еще один подход к возврату значения из асинхронной функции - передать объект, который сохранит результат от асинхронной функции.

Вот пример того же:

var async = require("async");

// This wires up result back to the caller
var result = {};
var asyncTasks = [];
asyncTasks.push(function(_callback){
    // some asynchronous operation
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;
            _callback();
        }
    });
});

async.parallel(asyncTasks, function(){
    // result is available after performing asynchronous operation
    console.log(result)
    console.log('Done');
});

Я использую объект result для хранения значения во время асинхронной операции. Это позволяет получить результат даже после асинхронного задания.

Я использую этот подход много. Мне было бы интересно узнать, насколько хорошо этот подход работает, когда задействован результат обратно через последовательные модули.

32
задан MPelletier 7 December 2013 в 03:04
поделиться

2 ответа

Вот как вы правильно извлекаете результат

$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();
$stmt->bind_result($id,$username);

while ($stmt->fetch()) {
  echo "Id: {$id}, Username: {$username}";
}

, или вы также можете сделать:

$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
  foreach ($row as $r) {
    print "$r ";
  }
  print "\n";
}

Надеюсь, вы поняли, что я получил ответ непосредственно из руководства здесь и здесь , где вы должны были пойти первым.

51
ответ дан Jeff Puckett 27 August 2018 в 04:18
поделиться

Обновлено

Из комментариев обнаружено, что подстановочные символы LIKE (_ и %) по умолчанию не выполняются по параметризованным запросам и поэтому могут вызвать неожиданные результаты.

Поэтому при использовании операторов «LIKE» используйте это «отрицательный lookahead» Regex для обеспечения того, чтобы эти символы были экранированы:

$param = preg_replace('/(?<!\\\)([%_])/g', '\\\$1',$param);

As альтернатива данному ответу выше, вы также можете использовать функцию MySQL CONCAT :

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
$stmt->bind_param("s", $param);
$stmt->execute();

Это означает, что вам не нужно редактировать значение $param, но это делает для немного более длинных запросов.

23
ответ дан Martin 27 August 2018 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: