栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Mysql / PDO违反完整性的主数据库重复-尽管表中没有任何内容

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql / PDO违反完整性的主数据库重复-尽管表中没有任何内容

很高兴您解决了这个问题。然而,这是为了应对 理由 为什么

bindParam()
不为你工作。这不是错误,它是通过设计以这种方式工作的。

根据文档:

将PHP变量绑定到用于准备语句的SQL语句中的相应命名或问号占位符。与PDOStatement :: bindValue()不同,该变量被绑定
为引用,并且仅在调用PDOStatement :: execute()时进行评估

(强调我的)

考虑到上述情况,这是:

 87   foreach($rowdata as $rowname => $rowvalue) 88   { 89$stmt->bindParam(':'.$rowname, $rowvalue); 90   }

…将

$rowvalue
通过 查询将每个参数绑定到 引用 ,在执行查询时,该 引用 将始终是
1
(的最后一个元素
$rowdata

使用它的方式

bindParam()
可能是这样的:

 87   foreach($rowdata as $rowname => $rowvalue) 88   { 89$stmt->bindParam(':'.$rowname, $rowdata[$rowname]); 90   }

…或者,甚至:

 87   foreach($rowdata as $rowname => &$rowvalue) 88   { 89$stmt->bindParam(':'.$rowname, $rowvalue); 90   }

…,以便每个参数都引用相应的array 元素

如上所述,一种替代方法是 _通过值_而不是通过引用

bindValue()
绑定参数。这意味着将在调用该参数时对其进行评估,而不是在实际需要该参数时(即查询执行)进行评估:__
bindValue()

 87   foreach($rowdata as $rowname => $rowvalue) 88   { 89$stmt->bindValue(':'.$rowname, $rowvalue); 90   }

当然,另一种选择是输入

execute()
一组参数,这可以
execute()
解析绑定部分 (因此是我个人的最爱!)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404689.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号