Intereting Posts
Как сгенерировать хороший PDF-файл с помощью php Excel? Получить текущий URL / URI без каких-либо переменных $ _GET Извлечь переменные Javascript страницы через PHP php создать файл и отправить в виде вложения без фактического создания файла Как определить длину (в пикселях) строки, отображаемой на веб-странице? Вставьте текущую дату / время, используя now () в поле, используя MySQL / PHP Использование любого класса / пространства имен с ZendFramwork SQL: как выбрать одну запись в день, предполагая, что каждый день содержит более 1 значения MySQL CSS: установите размер шрифта таким образом, чтобы текст занимал весь контейнер Не удается найти: BlowfishPasswordHasher Cakephp Попытка получить потоковые / вложенные комментарии в PHP Приведение данных из PHP в D3.JS Как вызвать контроллер подпапки с маршрутизацией CodeIgniter Передача данных из приложения iPhone в файл PHP Как сопоставить числа в массиве в PHP

Связывание нескольких значений в pdo

Есть ли простой способ привязки нескольких значений в PDO без повторной обработки? Взгляните на следующий код:

$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)"); $result_set->bindValue(':username', '~user'); $result_set->bindValue(':password', '~pass'); $result_set->bindValue(':first_name', '~John'); $result_set->bindValue(':last_name', '~Doe'); $result_set->execute(); 

Здесь я привязывал значения повторяющимся способом, который 4 раза. Итак, есть простой способ привязки нескольких значений в PDO?

Solutions Collecting From Web of "Связывание нескольких значений в pdo"

Вы всегда можете связывать значения в аргументах execute() пока вы в порядке со значениями, которые обрабатываются как PDO::PARAM_STR (строка).

 $result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)"); $result_set->execute(array( ':username' => '~user', ':password' => '~pass', ':first_name' => '~John', ':last_name' => '~Doe' )); 

Вы можете использовать массив, переданный как любой массив:

 $user = "Nile"; $pdo->execute(array(":user" => $user)); 

Если вы хотите связать на основе типа (string, int и т. Д.), Тогда нет. Если вы в порядке с привязкой всего к строке:

 $stmt = $db->prepare("..."); $stmt->execute(array( 'foo' => 'bar', 'something' => 'else', 'third' => 'thing', )); 

Чтобы по-настоящему никогда ничего не вводить дважды, вы можете использовать массив для предоставления данных и использовать функцию на том же массиве для вывода части привязки MySQL-запроса. Например:

 function bindFields($fields){ end($fields); $lastField = key($fields); $bindString = ' '; foreach($fields as $field => $data){ $bindString .= $field . '=:' . $field; $bindString .= ($field === $lastField ? ' ' : ','); } return $bindString; } 

Имена данных и столбцов берутся из одного ассоциативного массива ( $data ). Затем используйте bindFields($data) чтобы сгенерировать строку из column = :column пар column = :column для объединения в запрос MySQL:

 $data = array( 'a_column_name' => 'column data string', 'another_column_name' => 'another column data string' ); $query = "INSERT INTO tablename SET" . bindFields($data); $result = $PDO->prepare($query); $result->execute($data); 

bindFields($data) :

  a_column_name=:a_column_name,another_column_name=:another_column_name