Ten błąd otrzymujesz:
SQLSTATE [HY093]: nieprawidłowy numer parametru: parametr nie został zdefiniowany
jest fakt, że liczba elementów w $values
& $matches
nie jest ten sam lub $matches
zawiera więcej niż 1 element.
Jeśli $matches
zawiera więcej niż 1 elementu, niż wkładka nie powiedzie się, ponieważ nie jest nazwa tylko 1 kolumna mowa w zapytaniu (hash
)
Jeśli $values
& $matches
nie zawierają taką samą liczbę elementów, a następnie insert również zawiedzie, ponieważ zapytanie oczekuje x params, ale odbiera dane y $matches
.
Uważam, że będziesz musiał również upewnić się, że kolumna hash ma również unikalny indeks.
Spróbuj kod here:
<?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ł dostosować go trochę.
struktura Tabela użyłem jest here:
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 mój serwer XAMPP, który używa PHP 5.3.8 z MySQL 5.5.16.
Mam nadzieję, że to pomoże.
Czy próbowałeś podać wartości array_values ($ matches)? –
Dlaczego 'ON DUPLICATE KEY UPDATE hash = hash'? Może również "WSTAW IGNOWAĆ ...". Czy chcesz zrobić 'UPDATE hash = VALUES (hash)'? – eggyal
Czy tablica '$ values' zawierała coś przed pętlą? Poza tym, dlaczego nie przygotować pojedynczego 'hasła INSERT INTO (hash) VALUES (?)' I wykonać go wiele razy? – eggyal