php pdo insert,php – INSERT数组 – PDO

我有一部分代码应该在表单中输入数据,将其存储在数组中然后将其输入数据库.我在$fields和$data上使用了var_dump,它们都返回在字段中输入的信息(在add_habbo函数中).所以我遇到的问题是MYSQL / PDO代码没有将这些数据插入数据库.

这是我用来将它们插入数据库的代码:

$fields = '`' . implode('`, `', array_keys($habbo_data)) . '`';

$data = '\'' . implode('\', \'', $habbo_data) . '\'';

var_dump($fields);

var_dump($data);

global $con;

$query = "INSERT INTO `personnel` (:fields) VALUES (:data)";

$result = $con->prepare($query);

$result->bindParam(':fields', $fields, PDO::PARAM_STR);

$result->bindParam(':data', $data, PDO::PARAM_STR);

$result->execute();

我得到的印象是它与bindParam部分有关,可能是PDO :: PARAM_STR?谢谢你的协助!

更新:

$fields = '`' . implode('`, `', array_keys($habbo_data)) . '`';

$fields_data = ':' . implode(', :', array_keys($habbo_data));

var_dump($fields);

var_dump($fields_data);

global $con;

$query = "INSERT INTO `personnel` (`rank`, `habbo_name`, `rating`, `asts`, `promotion_date`, `transfer_rank_received`, `cnl_trainings`, `rdc_grade`,

`medals`, `branch`) VALUES ({$fields_data})";

$result = $con->prepare($query);

$result->execute($habbo_data);

$arr = $result->errorInfo();

print_r($arr);

错误:

Array ( [0] => 21S01 [1] => 1136 [2] => Column count doesn’t match

value count at row 1 )

解决方法:

你不能这样做:

>您需要单独添加每个变量/字段名称和值;

>您只能绑定值而不能绑定表名或字段名.

您必须将表和字段名称直接注入到sql中,以防止SQL注入问题,在执行此操作之前,需要针对白名单进行检查.

所以在你的情况下,这将是(草稿):

// assuming all fields have been checked against a whitelist

// also assuming that the array keys of `$habbo_data` do not contain funny stuff like spaces, etc.

$fields = '`' . implode('`, `', array_keys($habbo_data)) . '`';

$fields_data = ':' . implode(', :', array_keys($habbo_data));

var_dump($fields);

var_dump($fields_data);

global $con;

$query = "INSERT INTO `personnel` ({$fields}) VALUES ({$fields_data})";

$result = $con->prepare($query);

$result->execute($habbo_data);

请注意,我不再手动绑定变量,而是直接将关联$habbo_data数组作为参数发送到execute方法,请参阅example #2.

标签:php,pdo

来源: https://codeday.me/bug/20191002/1843156.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值