我在以下查询中指定我的tablename时遇到问题。
$sql = "INSERT INTO db269193_crud.posts (post_title,description)
VALUES ('" . $title . "','" . $description . "')";
表名是:db269193_crud.posts。由于我的hostingprovider,我无法将表名指定为“posts”。它们只允许我与我的databasename(db269193)一起指定它。
所以表名变成:db269193(点)帖子。然而,这个点在我的编辑器中以不正确的语法点亮。
如果我正确指定了表名,或者我必须使用变量来隐藏点符号,我需要有人帮忙告诉我:
$tablename = 'db269193.crud';
$sql = "INSERT INTO $tablename (post_title,description)
VALUES ('" . $title . "','" . $description . "')";
答案 0 :(得分:2)
你可以将整个名字放在反引号中以逃避它:
INSERT INTO `db269193_crud.posts` (post_title, description)
VALUES ('" . $title . "', '" . $description . "')
至于你的陈述的其余部分,我建议你使用参数而不是修改查询字符串。通过在查询中放置随机字符串,您只是在调用语法错误和SQL注入攻击。
答案 1 :(得分:0)
我无法将表名指定为' posts'因为我的hostingprovider。它们只允许我与我的数据库名称(db269193)一起指定它。
我非常怀疑,因为它需要更改数据库,这根本没有意义。我认为这是你的错,因为你没有首先选择使用DB。检查您的连接方式并确保您提供数据库名称,或者至少提供mysqli_select_db()
或同等数据。
$ tablename =' db269193.crud&#39 ;;
当表或列的名称冲突或是保留字时,您可以使用反引号:
$tablename = '`db269193.crud`';
或
$tablename = '`db269193`.`crud`';
$ sql =&#34; INSERT INTO $ tablename(post_title,description) 价值观(&#39;&#34;。$ title。&#34;&#39;,&#39;&#34;。$ description。&#34;&#39;)&#34 ;; < / p>
您使用不必要的连接使简单字符串变得复杂。这将起作用并且不易出错:
$sql = "INSERT INTO $tablename (post_title,description)
VALUES ('{$title}','{$description}')";
但是你似乎仍然容易受到sql注入攻击。我建议切换到PDO。