由于点表示法而无法在查询中指定我的tablename

时间:2017-08-17 11:00:14

标签: php mysql sql

我在以下查询中指定我的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 . "')";

2 个答案:

答案 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。