Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SQLSTATE [HY093]:Số tham số không hợp lệ:tham số không được xác định

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Về Neo4j

  2. nhiều truy vấn cùng một bảng nhưng ở các cột khác nhau mysql

  3. Cách nhập cơ sở dữ liệu MySQL trong dòng lệnh

  4. 1114 (HY000):Bảng đã đầy

  5. Năm ứng dụng phần mềm hàng đầu để truy cập máy chủ MySQL / MariaDB