prepared-statement相关内容
我在使用 PHP 的 PDO 对象准备更新语句和更新记录时遇到问题.我已经获取了原始 SQL 查询并在 phpMyAdmin 中运行它,参数被传递给函数的值替换.它按预期更新记录.但是,从脚本运行时,它不会更新.它抛出零错误并返回 00000 的 errorInfo() 回复,据我所知,这是 PDO 表示一切正常的方式.我知道 PDO 对象有效,因为它成功地从数据库中插入和选择记录,包括我试图更新
..
是否可以在准备好的 MySQL 语句中将列名作为参数传递?举个例子: 更新图片SET :placement = :imageURL哪里 ID = :titleID; PDO 在每个参数周围添加 ',所以上面的中间行变成: SET '主页' = '1.jpg' MySQL 不喜欢哪个.有没有办法在 PDO 语句中包含字段名称的参数并让它们接受? 否则我想我将不得不编写几个不同的 PDO
..
PDO 有选项 PDO::ATTR_EMULATE_PREPARES 控制是否准备好仅当数据库不支持或始终不支持时才应模拟语句.但是,它没有提到它是否总是默认模拟它们. 通常人们会假设仅在必要时才使用仿真,但由于它是 PHP,因此不能仅仅因为它是健全的就假设...... 解决方案 取决于数据库驱动程序.它们总是默认模拟对于 MySql(当然您可以手动关闭该选项);在 Postgres
..
我想执行以下查询: 选择*,(SELECT COUNT(*) FROM `tab2` WHERE `parent` = :id) AS `sum`从`tab1`哪里`id` = :id 如您所见,:id 占位符在查询中出现了两次.因此,如果我尝试使用以下命令执行此语句: $q->execute(['id'=>$row_id]); 我收到错误: 致命错误:未捕获的异常“PDOExcepti
..
您能否向使用 PDO 的准备好的语句发送比需要更多的参数而不会产生不良副作用? 这似乎是一个奇怪的问题,但我问的是因为我连续有 4 个查询,它们都使用相似和不同的参数.查询的相关部分: 第一个(选择,与其他人不同的表): WHERE threadID = :tid 第二(选择): WHERE user_ID = :u_ID AND thread_ID = :tid 第三
..
引用 MySQL INSERT 手册 - 更新也一样: 使用关键字 DEFAULT 将列显式设置为其默认值.这使得编写将值分配给除少数列之外的所有列的 INSERT 语句变得更容易,因为它使您能够避免编写不包括表中每一列的值的不完整 VALUES 列表.否则,您必须写出与 VALUES 列表中的每个值对应的列名列表. 简而言之,如果我写 INSERT INTO table1 (col
..
我一直在将应用程序转换为使用 PDO 准备好的语句而不是 mysqli,但我遇到了一个奇怪的问题.我在数据库中有一些记录,预计字段将为空.不是 'null'(字符串)或 ''(空字符串),而是 NULL.我动态地构建我的查询,所以过去当我在一个对象中遇到一个空变量时,我会像这样构建查询: WHERE fieldName 为空; 当字段为空时会得到预期的结果. 现在使用 PDO,我的查询不
..
我想将 PDO INSERT 和 UPDATE 准备好的语句切换为 INSERT 和 ON DUPLICATE KEY UPDATE,因为我认为它会比我目前正在做的更有效率,但我无法弄清楚与命名占位符和 bindParam 一起使用的正确语法. 我在 SO 上发现了几个类似的问题,但我是 PDO 的新手,无法成功地根据我的标准调整代码.这是我尝试过的,但它不起作用(它不插入或更新): 尝试
..
我环顾四周,但似乎无法找到我的问题的答案. 这是我第一次使用 PDO,所以我完全是新手. 我将大量数据拆分为 2 个表并希望将它们合并为一个,还有其他方法可以做到这一点,但没有深入探讨为什么我要这样做的复杂原因... 我生成了我想从中复制数据的表的记录集 构建我的语句 循环运行 但我收到以下错误 SQLSTATE[HY093]: Invalid parameter
..
注意:我已经将这个问题缩小到专门的 PDO,因为我能够使用 odbc_* 函数. 为什么我不能将此参数绑定到 PDO 准备好的语句? 这有效: $mssqldriver = 'ODBC Driver 13 for SQL Server';$pdoDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbna
..
我找到了很多方法来使用 PDO 的 exec 语句,但我不确定它对我有帮助.我的理解是我必须对准备好的语句使用 execute() 函数.我正在使用来自用户输入的数据更新一行,因此我想使用准备好的语句而不是 query() 调用. 我的代码如下: $dbh = buildDBConnector();$sql = "更新 tb_users设置 authState=1哪里 id = ?和 au
..
我遇到了这个烦人的错误,虽然我知道我为什么会遇到它,但我终生无法找到解决方案. if ($limit) {$sth->bindValue(':page', $page - 1, PDO::PARAM_INT);$sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT);}$sth->execute
..
我在两年前偶然发现了这个问题. 有没有办法在准备好的语句上调用 PDOStatement::execute() 时执行原始 SQL 字符串?出于调试目的,这将非常有用. 获胜答案指出 [...] 你也可以得到你想要的设置 PDO 属性PDO::ATTR_EMULATE_PREPARES.在这模式,PDO 将参数插入到SQL查询并发送整个执行时查询. 但它没有提到如何获取结果
..
我正在使用 PHP/PDO 中的准备好的语句.基本查询工作正常,将值传递给 WHERE 子句: $stmt = $db->prepare('SELECT title FROM episode WHERE id=:id');$stmt->bindParam(':id', $id, PDO::PARAM_INT);$id = 5;$stmt->execute(); 但是我有一种情况,我需要为字段名
..
我想使用一个准备好的语句,其中传入的参数用于 ORDER BY 和 LIMIT 子句,如下所示: $sql = 'SELECT * FROM table ORDER BY :sort :dir LIMIT :start, :results';$stmt = $dbh->prepare($sql);$stmt->执行(数组('排序' =>$_GET['排序'],'目录' =>$_GET['dir'
..
我看过很多文章在使用 PDO 时在命名参数前使用冒号 (:),还有一些文章不使用冒号.我会尽快不使用冒号,只是因为它少了一个按键并且更容易阅读. 它似乎对我来说工作正常,但我很好奇在使用冒号时是否遗漏了一些重要的东西? 例如,这很好用: function insertRecord ($conn, $column1, $comumn2) {尝试 {$insertRecord = $co
..
我正在尝试在循环内绑定 SQL 查询的参数: $db = new PDO('mysql:dbname=test;host=localhost', 'test', '');$stmt = $db->prepare('INSERT INTO 条目值 (NULL, ?, ?, ?, NULL)');$title = '一些标题';$post = '一些文字';$date = '2010-whateve
..
我可以让 Eloquent ORM 运行查询而不使用准备好的语句吗?还是我必须使用 whereRaw()? 我需要使用原始查询,因为我正在尝试与 InfiniDB 交互,后者不支持来自 PHP 的准备好的语句.无论如何,所有查询都将使用内部生成的数据,而不是用户输入,因此这不应该是安全问题. 解决方案 对于 SELECT 以外的任何内容,您可以使用 unprepared() DB:
..
我想知道 bindParam() 中数据类型的声明是什么(或bindValue()) 用于... 我的意思是,我认为如果我定义一个整数参数 (PDO::PARAM_INT),该参数必须转换为一个整数,例如 $delete->bindParam(1, $kill, PDO::PARAM_INT);//应该像$delete->bindParam(1, (int)$kill); 或者至少在参数
..
$resultSpendStmt = $connection->prepare(...);$array->bind_param("sdidi", $A, $B, $C, $D, $E);$array->execute();$array->store_result();$array->bind_result($F, $G, $H, $I, $J, $K); 我仍然有点不确定 bind_param
..