[SQL Server]表附近的语法不正确

时间:2018-10-02 12:24:26

标签: php sql-server-2012

我想为一系列表执行一个和相同的sql语句,例如37桌。

对于每个查询表的表对象名称,我想使用一个名为'$ table'的php变量。这些表的对象名称在随附的php文件“ tables.php”中提供。

变量“ $ table”是由字符串“ $ table”和每个表号的数组“ $ numbers”的串联重复生成的,并放入语句中。

SQL读取生成的变量,例如'$ table1'。但是我从SQL Server收到FROM子句的错误:

  

[SQL Server]'$ table1'附近的语法不正确。

我将变量“ $ table”放在方括号和引号中,但没有帮助。

请帮助!

//php script one, 'tables.php':

$table1 = 'myTable1';
$table2 = 'myTable2';
...
$table37 = 'myTable37';

//php script two:

include_once('tables.php');

$numbers = range(1,37);

foreach($numbers as $number) {

    $table = '$table' . $number;

    $stmt = $db_conn->prepare("SELECT * FROM $table;");
    $stmt->execute();
}

这是Hasan提供的解决方案。魔术是将变量'$ table'的concat放在由$引起的大括号中:

include_once('tables.php'); //provides table object names for variables $table1, $table2, etc., e.g. $table1 = 'mytable1_in_database';

//first number of a closed range of variables for tables to be queried
$i = 1; 

//last number of closed range of variables for tables to be queried
$j = 37;

for($i=1; $i<=$j; $i++) {

    $table = ${'table' . $i};

    $stmt = $db_conn->prepare("SELECT * FROM $table;");
    $stmt->execute();
}

1 个答案:

答案 0 :(得分:1)

由于使用单引号和变量无法解释,您可能会出错,可以使用双引号或选择我的以下方法

$i = 1;
foreach($numbers as $number) {
    $table = 'myTable' . $i;
    //$table = "${'table' . $i}"; use it if you have already defined variables

    $stmt = $db_conn->prepare("SELECT * FROM $table;");
    $stmt->execute();
$i++;
if($i == 38) break;
}

由于该问题现在处于搁置状态,希望您不要介意我在您的答案中添加一条建议以征询您的意见。

我希望这能使您到达想要的位置:)

foreach($numbers as $number) {

    $t = '$table' . $number;
    $table = $t;
    $stmt = $db_conn->prepare("SELECT * FROM $table");
    $stmt->execute();
}