[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
2022-02-12 14:18:32
質問
// BUILD VALUES
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
$values[] = '(?)';
}
// INSERT INTO DATABASE
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);
上記のコードは、次のようなエラーで失敗します。
sqlstate[hy093]: 無効なパラメータ番号: パラメータが定義されていない
とはいえ
count($matches) == count($values)
executeが呼ばれる直前?
ここで何が起こっているのでしょうか?
解決方法は?
このエラーは、あなたが受け取っているものです。
<ブロッククオートsqlstate[hy093]: 無効なパラメータ番号: パラメータが定義されていません
の要素数が少ないからです。
$values
&です。
$matches
が同じでない場合や
$matches
が1つ以上の要素を含んでいる。
もし
$matches
が複数の要素を含む場合、挿入は失敗します。なぜなら、クエリ (
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 < $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 ;
コードはPHP 5.3.8とMySQL 5.5.16を使用しているXAMPPサーバーで実行されました。
関連
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み] [Solved] Fatal error: メンバ関数bind_param()のbooleanに対する呼び出し [重複] [重複
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み】mysqli::query(): mysqli をフェッチできない
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] PHP product.php?id=1 のような URL を作成する方法
-
[解決済み] 「無効なパラメータ番号:パラメータが定義されていない」 データを挿入する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。