이 오류 받고있는 :
SQLSTATE [HY093] : 잘못된 매개 변수 번호 : $values
& $matches
의 요소 수는 없기 때문에 매개 변수가
정의되지 않은입니다 동일하거나 $matches
에 1 개 이상의 요소가 포함되어 있습니다.
$matches
쿼리에서 참조 단 1 열 이름이 있기 때문에 삽입이 실패합니다보다 1 개 이상의 요소가 포함되어있는 경우 $values
& $matches
다음 같은 수의 요소를 포함하지 않는 (hash
)
경우 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 < $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());
?>
:
코드 here를 사용해보십시오. 내가 사용
테이블 구조는 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 ;
코드의 MySQL 5.5.16과 PHP 5.3.8을 사용하는 내 XAMPP 서버에서 실행되었습니다.
이 정보가 도움이되기를 바랍니다.
대신 array_values ($ matches)를 전달해 보셨습니까? –
왜 '중복 키 업데이트 해시 = 해시'입니까? 'INSERT IGNORE ...'도 할 수 있습니다. 'UPDATE hash = VALUES (hash)'를하고 싶습니까? – eggyal
'$ values' 배열에 이미 루프 이전에 무언가가 들어 있었습니까? 또한, 하나의 INSERT INTO 해시 (해시) VALUES (?)를 준비하고 여러 번 실행하는 것이 어떻습니까? – eggyal