Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQLSTATE[HY093]:Nieprawidłowy numer parametru:parametr nie został zdefiniowany

Ten błąd, który otrzymujesz:

SQLSTATE[HY093]:Nieprawidłowy numer parametru:parametr nie został zdefiniowany

dzieje się tak, ponieważ liczba elementów w $values &$matches nie jest taki sam lub $matches zawiera więcej niż 1 element.

Jeśli $matches zawiera więcej niż 1 element, wstawienie nie powiedzie się, ponieważ w zapytaniu występuje tylko 1 nazwa kolumny (hash )

Jeśli $values &$matches nie zawierają takiej samej liczby elementów, wtedy wstawienie również się nie powiedzie, ponieważ zapytanie oczekuje x parametrów, ale otrzymuje y danych $matches .

Uważam, że będziesz musiał również upewnić się, że hash kolumny ma również unikalny indeks.

Wypróbuj kod tutaj :

<?php

/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = 'root';

/*** mysql password ***/
$password = '';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
    /*** echo a message saying we have connected ***/
    echo 'Connected to database';
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }

  
$matches = array('1');
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '?';
}

// INSERT INTO DATABASE
$sql = "INSERT INTO hashes (hash) VALUES (" . implode(', ', $values) . ") ON DUPLICATE KEY UPDATE hash='hash'";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute($matches);

//Error reporting if something went wrong...
var_dump($dbh->errorInfo());

?>

Będziesz musiał to trochę dostosować.

Struktura tabeli, której użyłem, jest tutaj :

CREATE TABLE IF NOT EXISTS `hashes` (
  `hashid` int(11) NOT NULL AUTO_INCREMENT,
  `hash` varchar(250) NOT NULL,
  PRIMARY KEY (`hashid`),
  UNIQUE KEY `hash1` (`hash`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Kod został uruchomiony na moim serwerze XAMPP, który używa PHP 5.3.8 z MySQL 5.5.16.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa funkcja RTRIM() w MySQL

  2. Jak przechowywać znak Emoji w bazie danych MySQL

  3. Jak zainstalować i skonfigurować MySQL na Ubuntu

  4. Wolny czas startu MySQL w trybie GTID? Problemem może być rozmiar pliku dziennika binarnego

  5. 2 sposoby konwersji między liczbą dziesiętną a szesnastkową w MySQL