【发布时间】:2020-04-07 16:27:40
【问题描述】:
我想检查 SQL 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 的表
我看到check if a table exists in SQL Server有很多不同的方法
不幸的是,每次我尝试使用 $tablename 变量来检查表是否存在时,它都会返回错误。我希望有人可以提供帮助。
【问题讨论】:
-
用单引号将表名括起来以表示文字
WHERE TABLE_NAME = N'$tablename'、IF OBJECT_ID ( N'$tablename', 'U' ) IS NULL。 -
是的,这似乎可以解决问题。
标签: php sql-server pdo odbc sqlsrv