sql >> データベース >  >> RDS >> Mysql

SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが定義されていません

    発生しているこのエラー:

    SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが定義されていません

    $valuesの要素の数が原因です &$matches 同じではないか、$matches 複数の要素が含まれています。

    $matchesの場合 複数の要素が含まれている場合、query(hashで参照される列名は1つしかないため、挿入は失敗します。 )

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

    コードは、MySQL5.5.16でPHP5.3.8を使用しているXAMPPサーバーで実行されました。



    1. MySQLでNull値を比較する方法

    2. MariaDBでのCURTIME()のしくみ

    3. MySQLでデータベース内のすべてのテーブルのサイズを確認する方法

    4. パラメーター化されたクエリは、提供されなかったパラメーターを予期します