使用PDO进行左连接

时间:2014-05-31 14:26:31

标签: php mysql pdo

我正在使用以下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)
        {

&#39; rest_mesero&#39; field是表格中的指数&#39; tbrestaurantes&#39;。

我需要加入来自&#39; tbrestaurantes&#39;的一些字段值。 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:

enter image description here

对于tbrestaurantes: enter image description here enter image description here

$ cadena的价值是&#39; HQ3&#39;。

2 个答案:

答案 0 :(得分:1)

你需要填补?在查询中:

$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 );

准备中你可以使用&#39;?&#39;然后使用bindValue将转义值附加到查询中。您的查询似乎没有这个,这是导致错误的原因。

答案 1 :(得分:1)

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

1)致电bindParam()

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

2)在致电execute()时提供值:

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