代码之家  ›  专栏  ›  技术社区  ›  Elliot

每当出现WHERE语句时,php mysql都会失败

  •  -1
  • Elliot  · 技术社区  · 15 年前

    我试图对一个小的mysql表进行一个简单的查询,但是当我插入WHERE子句时,我突然得到一个无效的查询错误(添加了一个 while(mysql_fetch_array ){} 在没有地点的情况下工作)。MySQL控制台给出了一个1064(语法)错误,但是,我检查了MySQL文档,并且尽我所能使用正确的语法。

    <?php
    $ind=rand(1,3);
    $quote=Null;
    $sign=Null;
    $afil=Null;
    $con=mysql_connect(localhost,root,********);//connect to database
    mysql_select_db("phone_site",$con);//select table
    $query="SELECT * FROM quotes WHERE index=$ind";//get the row for that index
    $data=mysql_query($query);
    //print out text
    print ("<p id=\"quote\">" . $data['quote'] . "</p>");
    print ("<p id=\"ename\">" . $data['sign'] . "</p>");
    print ("<p id=\"afill\">--  " . $data['afil'] . "</p>");
    mysql_close($con);//close connection
    ?>
    

    有人知道问题是什么吗?我正在使用XAMPP。它的MySQL有问题吗?

    3 回复  |  直到 13 年前
        1
  •  11
  •   Community datashaman    7 年前

    INDEX 是MySQL的 Reserved Words :

    某些词,如select、delete, 或者大人物被保留并要求 特殊处理 表和列等标识符 姓名。这也可能适用于 内置函数的名称。

    保留字允许为 标识符,如果引用它们作为 描述于 Section 8.2, “Schema Object Names”

    如果您有一个具有这种名称的列,则必须引用该列的名称--请参见 Schema Object Names 以下内容:

    标识符引号字符是 反勾号

    这意味着您的查询应该如下所示:

    $query="SELECT * FROM quotes WHERE `index`=$ind";
    


    完成我的回答 dustmachine's one 他说:

    我有点惊讶它没有 创建表时投诉。

    我想这个表是用一些工具创建的,比如phpmyadmin或mysql workbench;以及 (对某些人来说,总是如此) 引用列名,以避免此类问题。


    在注释后编辑: 我没看到,但你用的是这种代码:

    $data=mysql_query($query);
    print ("<p id=\"quote\">" . $data['quote'] . "</p>");
    

    这个 mysql_query 函数不会直接返回数据:它只返回“pressource” (引用手册页面) 以下内容:

    返回的结果资源应为 传递给 mysql_fetch_array() , 以及其他处理功能 结果表,以访问返回的 数据。

    不确定它能解决你所有的问题 (没有显示任何内容,即使原始HTML标记也不奇怪) 但至少有点帮助…

        2
  •  1
  •   dustmachine    15 年前

    我认为问题在于这个词的用法 index --那是一个 reserved word 具有特殊含义,不应用作列名。我有点惊讶,它在创建表时没有抱怨。

        3
  •  1
  •   Kijewski Jim    13 年前

    试试这个,它对我有用:

    $query="SELECT * FROM quotes WHERE index='$ind'";