开发者社区> 问答> 正文

SQLSTATE [HY093]:参数号无效:参数未定义

// 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)才执行?

这里发生了什么?

展开
收起
保持可爱mmm 2020-05-10 22:20:30 561 0
1 条回答
写回答
取消 提交回答
  • 您收到的此错误:

    SQLSTATE [HY093]:参数号无效:参数未定义

    是因为$values&中的元素数$matches不相同或$matches包含1个以上的元素。

    如果$matches包含多个元素,则插入操作将失败,因为query(hash)中仅引用了1个列名

    如果$values&$matches不包含相同数量的元素,则由于查询期望x参数,但是插入正在接收y data,因此插入也会失败$matches。

    我相信您还需要确保列哈希也具有唯一索引。

    在这里尝试代码:

    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服务器上运行,该服务器使用PHP 5.3.8和MySQL 5.5.16。

    我希望这有帮助。来源:stack overflow

    2020-05-10 22:20:50
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载