我想为一系列表(例如 37 个表)执行一个相同的 sql 语句。
对于每个查询表的表对象名称,我想使用名为“$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();
}
您收到错误是因为您使用的是单引号且变量无法解释,您可以使用双引号或选择我下面的方法
$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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句