PHP – 如何在预处理语句中将数组替换为主机参数
发布时间:2020-12-13 18:11:32 所属栏目:PHP教程 来源:网络整理
导读:我能够绑定int,str,bool和null类型的值,但我无法绑定数组类型. 我已经尝试了两个函数,即bindValue和bindParam,但它们都没有工作. 我怎么能做到这一点? // a helper function to map Sqlite data typefunction getArgType($arg) { switch (gettype($arg)) {
我能够绑定int,str,bool和null类型的值,但我无法绑定数组类型.
我已经尝试了两个函数,即bindValue和bindParam,但它们都没有工作. 我怎么能做到这一点? // a helper function to map Sqlite data type function getArgType($arg) { switch (gettype($arg)) { case 'double': return SQLITE3_FLOAT; case 'integer': return SQLITE3_INTEGER; case 'boolean': return SQLITE3_INTEGER; case 'NULL': return SQLITE3_NULL; case 'string': return SQLITE3_TEXT; default: throw new InvalidArgumentException('Argument is of invalid type '.gettype($arg)); } } $sql = "SELECT * FROM table_name WHERE id IN (?)"; $params = [[10,9,6]]; // array of array $dbpath = '/path/to/sqlite.sqlite'; $db = new SQLite3($dbPath,SQLITE3_OPEN_READONLY); $stmt = $db->prepare($sql); try { foreach ($params as $index => $val) { if (is_array($val)) { /************* I am stuck here *************/ $ok = $stmt->bindParam($index + 1,$val); // Using bindValue also didn't worked! } else { $ok = $stmt->bindValue($index + 1,$val,getArgType($val)); } if (!$ok) { throw new Exception("Unable to bind param: $val"); } } } catch (Exception $ex) { // NO exception is thrown from bindValue() or bindParam() $reason = "Error in binding statement. " . $ex->getMessage(); die($reason); } $result = $stmt->execute(); $data = []; while ($row = $result->fetchArray($mode)) { $data[] = $row; } var_dump($data); 编辑:我已经尝试过替换单身?在param数组中包含所需数量的问号,但只有当我的数组的值小于1000时它才有效!我认为这是PHP中SQLite3中语句编写方式的限制.
不幸的是,这是不可能的!您无法绑定数组.
对您来说最简单的解决方案是: >使用数组中的每个值创建一个占位符(?)的SQL查询 但是还有另外一种选择(例如子SELECT) More information here(即使它是一个Java问题,它几乎是相同的主题/问题,因为在这种情况下数据库类型无关紧要) 编辑:通常,绑定参数的SQL限制设置为999,但是你是can change it if you need to. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |