我想检查一下Server 2017表$tablename (由用户在PHP中输入)是否存在:
try {
$dothis = "
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N$tablename)
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )";
$tbl = $pdo->exec($dothis);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}但我总是会犯同样的错误:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NNewTable'.这里也是:
try {
$dothis = "
IF OBJECT_ID ( $tablename, 'U' ) IS NULL
BEGIN
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);错误:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'NewTable'.如果我不首先检查表是否存在,则创建该表没有问题:
try {
$dothis = "
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )";
$tbl = $pdo->exec($dothis);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}没有错误,它创建了名为$tablename的表。
我发现检查Server中是否存在表有很多不同的方法
不幸的是,每次我尝试使用$tablename变量来检查表是否存在时,它都会返回一个错误。我希望有人能帮忙。
发布于 2019-12-14 14:12:28
当用作文字时,将表名用单引号括起来。此外,如果表名可能不符合规则标识符 (例如嵌入式空格),请考虑将该表名称括在方括号(或双引号)中。
try {
$dothis = "
IF OBJECT_ID ( N'$tablename', 'U' ) IS NULL
BEGIN
CREATE TABLE [$tablename] ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);发布于 2019-12-14 14:17:51
这也适用于:
try {
$dothis = "
if not exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = N'$tablename')
BEGIN
CREATE TABLE $tablename ( id int IDENTITY (1,1), Name text, GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() )
END";
$tbl = $pdo->exec($dothis);https://stackoverflow.com/questions/59335775
复制相似问题