【问题标题】:Left join using PDO使用 PDO 左连接
【发布时间】:2014-05-31 14:26:30
【问题描述】:

我正在使用以下 PDO 查询:

  <?php
            $cadena =   $_SESSION[Region];

// We Will prepare SQL Query


       $STM = $dbh->prepare("SELECT  `id_mesero`, `nombre_mesero`,`alias_mesero`, `rest_mesero` FROM tbmeseros WHERE cadena_mesero='$cadena'");
// For Executing prepared statement we will use below function
    $STM->execute();
// we will fetch records like this and use foreach loop to show multiple Results
    $STMrecords = $STM->fetchAll();
    foreach($STMrecords as $row)
        {
    

“rest_mesero”字段的值是“tbrestaurantes”表中的索引。

我需要将“tbrestaurantes”中的一些字段值加入到 PDO 查询中,但我不知道如何使用 PDO。

欢迎任何帮助。

更新的问题文本

这是我的查询建议:

$dbh->prepare("SELECT * FROM tbmeseros LEFT JOIN tbrestaurantes ON tbmeseros.rest_mesero = tbrestaurantes.id_restaurante WHERE tbmeseros.cad_mesero = ?");

但是显示错误:

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 参数号无效:第 80 行 /.../AdminMeseros.php 中没有绑定参数

第 80 行是

$STM->execute();

这是我更新后的查询:

              <?php
            $cadena =   $_SESSION[Region];



       $STM =$dbh->prepare("SELECT * FROM tbmeseros LEFT JOIN tbrestaurantes ON tbmeseros.rest_mesero = tbrestaurantes.id_restaurante WHERE tbmeseros.cad_mesero = ?");
       $STM->bindParam(1, $cadena);
// For Executing prepared statement we will use below function
    $STM->execute(array($cadena));
// we will fetch records like this and use foreach loop to show multiple Results
    $STMrecords = $STM->fetchAll();
    foreach($STMrecords as $row)
        {

这里是表格的截图:

对于 tbmeseros:

对于 tbrestaurantes:

$cadena 的值为 'HQ3'。

【问题讨论】:

  • 发布两个表结构以及您需要选择的字段。
  • 使用 PDO 并没有什么特别之处。您只需将 SQL 放入 prepare() 的参数中。
  • 为什么你的 SQL 中有一个变量?使用 PDO 时,应使用:parameter,并使用bindParam() 将变量链接到它。
  • @Barmar,我已经在问题中包含了我对 SQL 的建议。
  • 没关系,有效,最后一个错误是字段名cad_mesero,应该是cadena_mesero。感谢您的帮助。

标签: php mysql pdo


【解决方案1】:

当您将参数放入 SQL 中时,您需要提供参数的值。有两种方法可以做到这一点:

1) 致电bindParam():

$STM->bindParam(1, $cadana);

2) 调用execute()时提供值:

$STM->execute(array($cadana));

【讨论】:

  • 谢谢@Barmar,按照你说的做后,错误消失了,但查询为空。它应该显示一条记录。
  • 那么查询没有找到任何与$cadana匹配的东西。
  • 我已经检查了表格,我确信 tbmeseros 中有一条与查询匹配的记录。我已经包含了我的问题和我的查询建议的数据。也许你能找到问题
  • 没关系,可以了,最后一个错误是字段名cad_mesero,应该是cadena_mesero。感谢您的帮助。
  • 我注意到了这个差异,我以为你只是在复制到 SO 时缩写了它,否则会导致错误消息。
【解决方案2】:

您需要填写 ?在查询中:

$q = $dbh->prepare("SELECT * FROM tbmeseros LEFT JOIN tbrestaurantes ON tbmeseros.rest_mesero = tbrestaurantes.id_restaurante WHERE tbmeseros.cad_mesero = ?");
$q->bindValue( 1, 'x' );
$q->execute();
print_r( $q->fetchAll( PDO::FETCH_ASSOC );

在准备中,您可以使用“?”然后 bindValue 将转义值附加到查询中。您的查询似乎没有这个,这就是错误的原因。

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2015-09-28
    • 2014-12-07
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2010-11-16
    相关资源
    最近更新 更多