Php 使用PDO左连接
我正在使用以下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
<?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));