-1

我只是按照这里的一群人的建议转向 PDO :)

这是当前有效的代码

<?php
$table = "tbl_staff";
$all = $database->find_by_sql('SELECT * FROM tbl_staff'); echo '<pre>';
echo "<b> Find by SQL</b></br>";
print_r($all);
echo '</pre>';
?>

public function find_by_sql($sql) {
$this->query($sql);
$rows = $this->resultset();
return $rows;
}

public function query($query){
$this->stmt = $this->dbh->prepare($query);
}

public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

public function execute(){
return $this->stmt->execute();
}

这样一切都按预期工作并返回所有 tbl_staff 详细信息。

但是我想更改表名以从这样的变量中提取名称

<?php
$table = "tbl_staff";
$all = $database->find_by_sql('SELECT * FROM "'.$table.'"'); echo '<pre>';
echo "<b> Find all rows </b></br>";
print_r($all);
echo '</pre>';
?>

这将返回语法错误或访问冲突的服务器错误:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“tbl_staff”附近使用正确的语法

我只尝试了 $table、'$table' 和 {$table} 但它似乎将该行从字面上读取为 $table 而不是用变量替换。PDO 语句有不同的规则吗?我对掌握 PDO 有点迷失,如果这是一个简单的问题,我深表歉意

4

2 回答 2

1

PHP 不会评估单引号中使用的变量,它会将它们视为文字。使用双引号,如下所示:

$all = $database->find_by_sql("SELECT * FROM $table");

此外,您还有额外的引号,$table例如"$table"

select * from "tbl_staff"

因此语法错误,这不是你想要的。

于 2013-08-10T02:03:26.903 回答
0

只需删除双引号:

$all = $database->find_by_sql('SELECT * FROM '.$table);
于 2013-08-10T02:05:28.810 回答