pdo将变量绑定到准备好的mysql语句,并使用while循环获取以在表中显示

时间:2012-12-12 12:36:29

标签: php mysql pdo

我正在纠结于使用pdo在表中显示MySQL数据的pdo语句。

我的语法是:

 $startdate=$_POST["start"];
 $enddate=$_POST["end"];
 $ttype=$_POST["ttype"];

$result = $db->query("SELECT cycletype,commenttype,adminstatus FROM v2loads where haulier= :haulier and :start < sarrive and :end> sarrive order by sarrive"); 
$result->bindParam(':haulier', $company, PDO::PARAM_STR); 
$result->bindParam(':start', $startdate, PDO::PARAM_STR); 
$result->bindParam(':end', $enddate, PDO::PARAM_STR); 
$result->execute;

然后我尝试用

获取输出
<table>
    <? while($row = $jobs->fetch(PDO::FETCH_ASSOC)) {  ?>
      <tr>
        <td>
          <? echo $row['cycletype'];?>
        <td>
        <td>
          <? echo $row['icommenttype];?>
        <td>
        <td>
          <? echo $row['adminstatus'];?>
        <td>
     </tr>
    <?  }  ?>
</table>

这会产生错误:  在非对象上调用成员函数bindParam()

任何帮助将不胜感激。 亲切的问候,

4 个答案:

答案 0 :(得分:2)

这意味着您的查询未解析,$ result不是PDO语句对象。转储$db->errorInfo()以获取有关错误的更多详细信息。

可能就像“:end&gt;”一样简单在“&gt;”之前需要一个空格 - 我知道我倾向于把这些东西放在一边,也许是因为过去的痛苦:)

答案 1 :(得分:2)

使用prepare方法而非query准备好的陈述。

  • 方法调用需要括号,对于PHP,它将是一个属性:$result->execute();而不是$result->execute;
  • 你应该迭代$ result而不是$ jobs:while ($row = $result->fetch(PDO::FETCH_ASSOC)) {

答案 2 :(得分:2)

这是你的剧本:

    $startdate=$_POST["start"];
    $enddate=$_POST["end"];
    $ttype=$_POST["ttype"];
    $result = $db->query("SELECT cycletype,commenttype,adminstatus FROM v2loads where    haulier= :haulier and :start < sarrive and :end> sarrive order by sarrive"); 
    $result->bindParam(':haulier', $company, PDO::PARAM_STR); 
    $result->bindParam(':start', $startdate, PDO::PARAM_STR); 
    $result->bindParam(':end', $enddate, PDO::PARAM_STR); 
    $result->execute;

将此更改为:

  $startdate=$_POST["start"];
  $enddate=$_POST["end"];
  $ttype=$_POST["ttype"];
  $result = $db->prepare("SELECT cycletype,commenttype,adminstatus FROM v2loads where    haulier= :haulier and :start < sarrive and :end> sarrive order by sarrive"); 
  $result->bindParam(':haulier', $company, PDO::PARAM_STR); 
  $result->bindParam(':start', $startdate, PDO::PARAM_STR); 
  $result->bindParam(':end', $enddate, PDO::PARAM_STR); 
  $result->execute;

然后尝试:

  <table>
  <? while($row = $result->fetch(PDO::FETCH_ASSOC)) {  ?>
  <tr>
    <td>
      <? echo $row['cycletype'];?>
    <td>
    <td>
      <? echo $row['icommenttype];?>
    <td>
    <td>
      <? echo $row['adminstatus'];?>
    <td>
  </tr>
  <?  }  ?>
 </table>

您在非对象上使用了bindparamprepare而不是query

答案 3 :(得分:0)

答案的获取部分有一个拼写错误。

<? echo $row['icommenttype];?>应为<? echo $row['icommenttype'];?>

我尝试编辑它,但由于SO的最低6个字符编辑策略而被拒绝。