Lỗi này bạn đang gặp phải:
SQLSTATE [HY093]:Số tham số không hợp lệ:tham số không được xác định
là do số phần tử trong $values
&$matches
không giống nhau hoặc $matches
chứa nhiều hơn 1 phần tử.
Nếu $matches
chứa nhiều hơn 1 phần tử, khi đó chèn sẽ không thành công, vì chỉ có 1 tên cột được tham chiếu trong truy vấn (hash
)
Nếu $values
&$matches
không chứa cùng một số phần tử thì chèn cũng sẽ không thành công, do truy vấn mong đợi x params nhưng nó đang nhận dữ liệu y $matches
.
Tôi tin rằng bạn cũng sẽ cần phải đảm bảo băm cột cũng có một chỉ mục duy nhất trên đó.
Hãy thử mã tại đây :
<?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ạn sẽ cần phải điều chỉnh nó một chút.
Cấu trúc bảng mà tôi đã sử dụng là tại đây :
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 ;
Mã đã được chạy trên Máy chủ XAMPP của tôi đang sử dụng PHP 5.3.8 với MySQL 5.5.16.