यह त्रुटि आपको मिल रही है:
<ब्लॉकक्वॉट>SQLSTATE[HY093]:अमान्य पैरामीटर संख्या:पैरामीटर परिभाषित नहीं किया गया था
ऐसा इसलिए है क्योंकि $values
. में तत्वों की संख्या &$matches
समान नहीं है या $matches
1 से अधिक तत्व शामिल हैं।
अगर $matches
1 से अधिक तत्व शामिल हैं, तो सम्मिलन विफल हो जाएगा, क्योंकि क्वेरी में संदर्भित केवल 1 कॉलम नाम है (hash
)
अगर $values
&$matches
तत्वों की समान संख्या नहीं है, तो सम्मिलित भी विफल हो जाएगा, क्वेरी के कारण x params की अपेक्षा की जा रही है, लेकिन यह 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());
?>
आपको इसे थोड़ा सा अनुकूलित करने की आवश्यकता होगी।
मेरे द्वारा उपयोग की गई तालिका संरचना यहां है :
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 सर्वर पर चलाया गया था जो MySQL 5.5.16 के साथ PHP 5.3.8 का उपयोग कर रहा है।