您收到的此错误:
SQLSTATE [HY093]:参数号无效:参数未定义
是因为
$values&中的元素数
$matches不相同或
$matches包含1个以上的元素。
如果
$matches包含多个元素,则插入操作将失败,因为query(
hash)中仅引用了1个列名
如果
$values&
$matches不包含相同数量的元素,则由于查询期望x参数,但是插入正在接收y data,因此插入也会失败
$matches。
我相信您还需要确保列哈希也具有唯一索引。
在这里尝试代码:
<?php$hostname = 'localhost';$username = 'root';$password = '';try { $dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password); 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());?>您将需要对其稍作调整。
我使用的表结构在这里:
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 ;
代码在我的XAMPP服务器上运行,该服务器使用PHP 5.3.8和MySQL 5.5.16。
我希望这有帮助。


![SQLSTATE [HY093]:参数号无效:参数未定义 SQLSTATE [HY093]:参数号无效:参数未定义](http://www.mshxw.com/aiimages/31/398819.png)
