Php 使用PDO左连接

Php 使用PDO左连接,php,mysql,pdo,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'&q

我正在使用以下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)
        {
    
但这是一个错误:

警告: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)
        {

您需要填写吗?在查询中:

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

在prepare中,可以使用“?”和bindValue将转义值附加到查询。您的查询似乎没有此项,这就是错误的原因。

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

1) 调用
bindParam()

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


发布两个表结构以及需要选择的字段。使用PDO没有什么特别的。您只需将SQL放在
prepare()
的参数中。为什么SQL中有一个变量?当您使用PDO时,您应该使用
:parameter
,并使用
bindParam()
将变量链接到它。@Barmar,我已经在问题中包含了我对SQL的建议。这是正常的,它可以工作,最后一个错误是字段名cad_mesero,它应该是cadena_mesero。谢谢你的帮助。谢谢@Barmar,在完成你所说的之后,错误消失了,但是查询是空的。它应该显示一条记录。然后查询找不到任何与
$cadana
匹配的内容。我已经检查了表,并且我确信tbmeseros中有一条与查询匹配的记录。我已经包括了我的问题和我的查询建议的数据。也许你能找到问题,它是好的,它工作,最后一个错误是字段名cad_mesero,它应该是cadena_mesero。谢谢你的帮助。我注意到了这个差异,我以为你在复制到SO时只是把它缩写了一下,否则会导致错误消息。
$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 );
$STM->bindParam(1, $cadana);
$STM->execute(array($cadana));