mysql hy093_SQLSTATE [HY093]:参数号无效:未定义参数

您收到此错误:SQLSTATE [HY093]:参数号无效:未定义参数

是因为$values&中的元素数量$matches不相同或$matches包含多于1个元素。

如果$matches包含多于1个元素,则插入将失败,因为查询中只引用了1个列名(hash)

如果$values&$matches不包含相同数量的元素,那么插入也将失败,因为查询期望x参数但是它正在接收y数据$matches。

我相信你还需要确保列散列上还有一个唯一的索引。

试试这里的代码:<?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 

$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。

我希望这有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值