douer9399 2013-07-19 02:01
浏览 31
已采纳

准备语句,将字段作为参数奇怪的结果

i'm trying to parameterize the column in order to create a very dynamic query. What i tried is:

$db = new PDO("mysql:host=".$this->host.";dbname=myDB",$this->user,$this->pass);    
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$arr = array("g"=>"My Date","p"=>"Prono Score","a"=>"Age");
$param = "";
foreach($arr as $key=>$value) $param.=(':'.$key.',');
$param = substr($param, 0,count($param)-2);
$query = $db->prepare("SELECT $param FROM myTable LIMIT 1"); 
foreach($arr as $key=>$value) $query->bindValue($key,$value);
$query->execute();
$res = $query->fetchAll(PDO::FETCH_ASSOC);
return $res;

Having that results:

Array
(
    [0] => Array
        (
            [My Date] => My Date
            [Prono Score] => Prono Score
            [Age] => Age
        )

)

What is my error? i don't know why it happens.

  • 写回答

1条回答 默认 最新

  • dsjq62428 2013-07-19 02:17
    关注

    With this line your binding placeholders called g, p, a to your select fields

    $query = $db->prepare("SELECT $param FROM myTable LIMIT 1"); 
    

    Then your assigning literal values to it with this line

    foreach($arr as $key=>$value) $query->bindValue($key,$value);
    

    Your really executing a query called

    "Select 'My Date', 'Prono Score', 'Age' FROM myTable LIMIT 1"
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多