【发布时间】:2012-11-10 13:03:57
【问题描述】:
我有一个这样的数组
$a = array( 'phone' => 111111111, 'image' => "sadasdasd43eadasdad" );
当我执行 var-dump 时,我得到了这个 ->
{ ["phone"]=> int(111111111) ["image"]=> string(19) "sadasdasd43eadasdad" }
现在我正在尝试使用 IN 语句将其添加到数据库中 -
$q = $DBH->prepare("INSERT INTO user :column_string VALUES :value_string");
$q->bindParam(':column_string',implode(',',array_keys($a)));
$q->bindParam(':value_string',implode(',',array_values($a)));
$q->execute();
我遇到的问题是 implode 返回一个字符串。但是“电话”列是数据库中的整数,并且数组也将其存储为整数。因此我得到了 SQL 错误,因为我的最终查询看起来像这样--
INSERT INTO user 'phone,image' values '111111111,sadasdasd43eadasdad';
这是一个错误的查询。有什么办法解决吗?
我的列名是动态的,基于用户想要插入的内容。所以我不能使用像 :phone 和 :image 这样的占位符,因为我可能并不总是得到这两列的值。如果有办法解决这个问题,请告诉我。否则我将不得不为每种更新类型定义多个函数。
谢谢。
【问题讨论】:
-
您的磨练场的长度是多少?它返回九 (9) 个 1,但您的电话号码有 10 位数字。 Sql 会在截断值时返回警告,但只是检查。
-
同意 Louis,虽然电话号码可以被视为一个整数,但您不要指望用它做任何数学运算,而且您可能会用完大小,通常最好将其处理并存储为文本字符串。
标签: php mysql database arrays pdo