MySQL错误:表名不正确



我对web开发还很陌生,所以我很有可能在这里做一些非常愚蠢的事情。

我使用AJAX将数据发送到一个PHP文件,该文件将使用数据运行SQL命令来更新表。我正在处理编辑文章,所以我的PHP文件需要知道三件事:文章的原始名称(供参考(、新名称和新内容。我还告诉它用户在看什么页面,这样它就知道该编辑哪个表。

    $('#save_articles').click(function () {
    var current_page = $('#current_location').html();
    var array_details = {};
    array_details['__current_page__'] = current_page;
        $('#article_items .article_title').each(function(){
            var article_name = $(this).html(); //The text in this div is the element name
            var new_article_name = $(this).next('.article_content');
            new_article_name = $(new_article_name).children('.article_content_title').html();
            var new_article_content = $(this).next('.article_content');
            new_article_content = $(new_article_content).children('.article_content_content').html();
            array_new_deets = {new_name:new_article_name, content:new_article_content};
            array_details[article_name] = array_new_deets;
        });
        send_ajax("includes/admin/admin_save_articles.php", array_details);
    });

在PHP文件中,我首先检索当前页面并将其存储在$sql_table中,然后从$_POST中删除当前页面变量。然后我运行这个。

foreach($_POST as $key => $value){
        $original_name = $key;
        $new_name = $value['new_name'];
        $new_cont = $value['content'];

        $query =    "UPDATE 
                        `$sql_table`
                    SET 
                        `element_name`= '$new_name',
                        `element_content` = '$new_cont',
                    WHERE
                        `element_name` = '$original_name'";
        $query = mysql_query($query);

        if(!$query){
                die(mysql_error());
            }
    }

我总是收到一个错误,说"sitep_Home"是一个不正确的表名。它不仅是我数据库中的一个真正的表,而且我实际上已经更改了它的名称,以确保它不会出现关键字或其他问题。

如果我在不使用变量$sql_table的情况下运行查询(指定表名为"sitep_Home"(,则查询将接受该表。然后它实际上并没有更新表,我怀疑这是因为WHERE参数也使用了一个变量。

有人看到我在这里做错了什么吗?

如果您确信$sql_table包含正确的表名,请尝试将其用作'$sql_table'。就像您在使用其他列的值一样检查这是否有帮助!!

在执行查询之前转储/记录查询-之后问题应该很明显(我怀疑表名中有一些额外的字符(。

几件事:

  • 您永远不应该信任您的用户并接受他们将在$_POST中发送给您的所有内容,而是使用要更新的字段的白名单
  • 您的代码容易受到SQL注入的攻击,我建议至少使用一些框架/独立库或PDO,避免将来不推荐使用的mysql_query。查看此项以获得一些解释http://www.phptherightway.com/#databases

MySQL中的表名区分大小写。请检查箱子里是否有错误。

您必须将查询中mysql表的名称括在``qoutes中。当您日常创建mysql表时,在创建之前修剪(mysql名称表的$variable(是非常重要的,因为如果"mysql名称表格的$variant"在edns或启动mysql时有空间,则不创建表。最后,当您在查询中调用mysql名称表的dinamically$variable时,您必须再次修剪(mysql名称表的$variable(。

最新更新