Intereting Posts
Существуют ли языки программирования, предназначенные для PHP, помимо Haxe? Как проверить токен базы данных firebase с помощью PHP (JWT)? PhP Контактная форма в WordPress WooCommerce: получить данные Json в многомерном массиве, соответствующие произвольному полю ACF Как я могу получить значение атрибута, называемого xlink: href узла xml, используя php отображать изображение по умолчанию, если у пользователя нет фотокодинера Как добавить фотографию в базу данных mysql с помощью php? Неустранимая ошибка: допустимый размер памяти 134217728 байтов исчерпан (CodeIgniter + XML-RPC) Передача логического через PHP GET Количество строк в Доктрине 2 Создайте однобитовое растровое изображение (монохромное) в php какова разница между представлением и задачей в joomla 2.5 и что такое структура url в joomla 2.5? php Описание ошибки: Неверное строковое значение: '\ xF4t l' \ xE9 … 'на вставке PDO: Как проверить, действительно ли соединение активно, для реального? Скрестить содержимое div с помощью PHP и cURL

PHP PDOException: "SQLSTATE : недопустимый номер параметра"

Я получаю сообщение об ошибке «SQLSTATE [HY093]: Недопустимый номер параметра« когда я пытаюсь запустить следующую функцию:

function add_persist($db, $user_id) { $hash = md5("per11".$user_id."sist11".time()); $future = time()+(60*60*24*14); $sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash"; $stm = $db->prepare($sql); $stm->execute(array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future)); return $hash; } 

Я чувствую, что это что-то простое, что я просто не поймаю. Есть идеи?

Solutions Collecting From Web of "PHP PDOException: "SQLSTATE : недопустимый номер параметра""

Пытаться:

 $sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2"; 

а также

 $stm->execute(array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash)); 

Выдержка из документации ( http://php.net/manual/en/pdo.prepare.php ):

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

Это одно ограничение использования PDO. PDO просто подтверждает количество параметров в запросе и выполнение и выдает ошибку при любом несоответствии. Если вам нужно использовать повторение параметров в ваших запросах, вы должны пойти об этом с помощью обходного пути

 $sql = "insert into persist(user_id, hash, expire) values (:user_id, :hash, :value) on duplicate key update hash = :hash2"; $stm->execute(array(':user_id' => $user_id, ':hash' => $hash, ':hash2' => $hash, ':expire' => $expire)); 

Вы можете обратиться к этому для более сложного обходного пути – https://stackoverflow.com/a/7604080/1957346

Я знаю, что это старый вопрос, однако я считаю, что стоит упомянуть, что более подходящим решением было бы избежать неудобных обходных решений в PHP, используя SQL соответственно:

 INSERT INTO `persist` (`user_id`, `hash`, `expire`) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE `hash`=VALUES(`hash`) 

Таким образом, вам нужно только отправить значение один раз.

 $stmt = $con->prepare("INSERT INTO items(Name, Description, Price, Country_Made, Status, Add_Date) VALUES( :zname, :zdesc, :zprice, :zcountry, zstatus, now())"); $stmt-> execute(array( "zname" => $name, "zdesc" => $desc, "zprice" => $price, "zcountry" => $country, "zstatus" => $status ));