Intereting Posts
php parse xml – ошибка: StartTag: недопустимое имя элемента В то время как цикл PHP get_result не работает Как получить тип mime в PHP PHP – регулярное выражение. Заменить любое место в цитате с помощью подчеркивания? Содержимое файла file_get_content () для обработки PHP Как удалить # из хэштегов Twitter? Ширина пользовательского изображения Instagram API Записи SQL, срок действия которых истекает через 24 часа Добавление пользовательского сегмента URL на страницу wordpress Можете ли вы получить имя пользователя Windows (AD) в PHP? Laravel лучший способ сохранить данные от одного к одному? как читать математические уравнения файла docx, используя php-код-воспламенитель постоянная связь клиентского сервера PHP Могу ли я использовать прямой URL-адрес, например, твиттер или myspace в PHP Как получить дату (например, как 2013-06-02) в прошлом на основе входных чисел дней (например, как 230, 20 или 360 или сколько угодно дней) в PHP?

Laravel жалуется на запрос с повторяющимися именованными параметрами

Когда я делаю (в laravel):

<?php \DB::select('SELECT * FROM my_table WHERE id = :id || id = :id', [ 'id' => 1, ]); 

В нем говорится:

SQLSTATE [HY093]: недопустимый номер параметра (SQL: SELECT * FROM my_table WHERE id =: id || id =: id)

Но когда я делаю (в чистом php):

 <?php $dbh = new PDO('mysql:dbname=...', '...', '...'); $stmt = $dbh->prepare('SELECT * FROM my_table WHERE id = :id || id = :id'); $r = $stmt->execute([ 'id' => 1, ]); while ($row = $stmt->fetch()) { var_dump($row['id']); } 

Это удается. Что я делаю не так?

PS По-видимому, запрос, который я выполнял, когда я столкнулся с проблемой, был более значимым.

UPD Более-менее реальный запрос:

 SELECT id FROM objects WHERE ACOS( SIN(RADIANS(lat)) * SIN(RADIANS(:lat)) + COS(RADIANS(lat)) * COS(RADIANS(:lat)) * COS(RADIANS(:lng - lng)) ) * 6371 < 10 

Solutions Collecting From Web of "Laravel жалуется на запрос с повторяющимися именованными параметрами"

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

mysqli::prepare :

Этот параметр может включать один или несколько маркеров параметров в выражении SQL, вставляя знаки вопросительного знака (?) В соответствующие позиции.

pdo::prepare :

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

По умолчанию у Laravel отключен режим эмуляции. Его можно включить в config/database.php , добавив в настройки подключения параметры 'options' => [PDO::ATTR_EMULATE_PREPARES => TRUE] . Таким образом, вы получите тот же результат, что и в чистом php. Не уверен, что это хорошая идея.