首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BindValue不接受假值

BindValue不接受假值
EN

Stack Overflow用户
提问于 2019-01-08 10:10:15
回答 1查看 80关注 0票数 0

数据库中有一个文本数据类型,希望输入true或false值。如果我在BindParam中正确地使用Mysqli或PDO,那么它会添加1或0,但是当我尝试使用BindValue时,它只起作用。虚值交换为空空间。

代码语言:javascript
复制
try{
 $conn =  new PDO("mysql:host=localhost;dbname=name_db", "root", "");
 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 $sql = "INSERT INTO upload_meta (video_id, upload_key, upload_value) VALUES (:video_id,:upload_key,:upload_value)"; 
 $temp = $conn->prepare($sql);
 $temp->bindValue(':video_id', 11111111);
 $temp->bindValue(':upload_key', 'exodo');
 $temp->bindValue(':upload_value', false);

$temp->execute();   

}catch(PDOException $e){

    echo $e->getMessage();


}

此字段将接收需要为文本的各种类型的值。

代码语言:javascript
复制
CREATE TABLE `upload_meta` (
  `meta_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `video_id` int(11) unsigned NOT NULL,
  `upload_key` varchar(255) DEFAULT NULL,
  `upload_value` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`meta_id`),
  KEY `video_id` (`video_id`),
  KEY `index_upload_key` (`upload_key`(191)),
  CONSTRAINT `upload_meta_ibfk_1` FOREIGN KEY (`video_id`) REFERENCES `video` (`id_video`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-08 12:52:07

根据文档

答案在bindParam的文档中

与PDOStatement::bindValue()不同,变量被绑定为引用,并且只在调用PDOStatement::execute()时才进行计算。

execute

调用PDOStatement::bindParam()将PHP变量绑定到参数标记:绑定变量将其值作为输入传递,并接收相关参数标记的输出值(如果有的话)

你的案子

您的数据库结构期望upload_value作为varchar,它基本上是文本/字符串。当您使用bindParam时,它是工作的,因为它传递的值为true或false,即1或0。

但是当您使用bindValue时,引用将被传递,然后在执行时进行计算,因此true被转换为1 ( string /text),而false则被计算为“空”字符串。

溶液

要么使用bindParam,要么如果您想使用bindValue,您应该更新数据库结构以接受upload_value的布尔值,而不是varchar。

5分钟指南:https://w3guy.com/php-pdostatement-bindparam-bindvalue/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54089493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档