PHP Where子句语法

PHP Where子句语法,php,mysql,syntax-error,Php,Mysql,Syntax Error,请有人解释一下我做错了什么,可能还有更多的错误。第一次尝试在教程中使用PHP。教程没有指定表名。 错误是: 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行“WHERE userName=”附近 我的代码: <?php //MySQL Database Setup define('DB_HOST', '***'); define('DB_NAME', '***'); $db_table = "emailUser"; define('DB_USER'

请有人解释一下我做错了什么,可能还有更多的错误。第一次尝试在教程中使用PHP。教程没有指定表名。 错误是:

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行“WHERE userName=”附近

我的代码:

<?php
//MySQL Database Setup
define('DB_HOST', '***');
define('DB_NAME', '***');
$db_table = "emailUser";
define('DB_USER','***');
define('DB_PASSWORD','***');

//Connection
$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());

//Connection Checking
//if (mysqli_connect_errno($con)) {
//    echo "Failed to connect to MySQL: " . mysqli_connect_error();
//  }
//else {
//      echo “Successfully connected to the AllColes webmail database…”;
//  }

function webmailNewUser()
{
    $userFullName = $_POST['webmailFullName'];
    $userName = $_POST['webmailUserName'];
    $userExEmail = $_POST['webmailExEmail'];
    $userPhone = $_POST['webmailPhone'];
    $userDOB = $_POST['userDOB'];
    $query = "INSERT INTO $db_table_name (userFullName,userName,userExEmail,userPhone,userDOB) VALUES ('$userFullName','$userName','$userExEmail','$userPhone','$userDOB')";
    $data = mysql_query ($query) or die(mysql_error());
    if ($data)
    {
        echo "Your registration for ColesMail is compleated.";
    }
    else
    {
        echo "Registration for ColesMail has NOT compleated succesfully!";
    }
}

function webmailSignUp()
{
    if(!empty($_POST['webmailUserName'])) 
    {
        $query = mysql_query("SELECT * FROM $db_table_name WHERE userName = '$_POST[user]'") or die(mysql_error()); //checking the same name in the field

        if(!$row = mysql_fetch_array($query) or die(mysql_error()))
        {
            webmailNewUser();
        }
        else
        {
            echo "Sorry someone already has this username";
        }
    }
}

function webmailForgottenPW()
{
                    //Email Requirements
                        $webMaster = 'christophercoles@live.co.uk';
                        $emailSubject = 'Forgotten Password Reset!';
                        $headers = "From: $webMaster\r\n";
                        $headers = "MIME-Version: 1.0\r\n";
                        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
                        $headers .= "X-Mailer: PHP/".phpversion();
                    //Forgotten Password Fields
                        $fpUserName = $_POST['webmailFPuserName'];
                        $fpContactMethod = $_POST['webmailFPcontactMethod'];
                        $fpDOB = $_POST ['webmailFPDOB'];
                    //Email Body
                        $body = "
                        <html>
                            <head>
                            <title>Password Reset for $fpUserName</title>
                            </head>
                            <body>
                            <h1>Password Reset</h1><hr>
                            Name: $fpUserName <br>
                            Request Password by: $fpContactMethod <br>
                            Date of Birth: $fpDOB
                            </body>
                        </html>";

                    //After Sending
                        mail($webMaster,$emailSubject,$body,$headers);
                        $theResults = "Sucess Email Sent!!!";
                        echo $theResults;
}

if(isset($_POST['webmailRegisterSubmit']))
{
    webmailSignUp();
}
if(isset($_POST['webmailForgottenPWSubmit']))
{
    webmailForgottenPassword();
}
?>
试试这个

mysql_query("SELECT * FROM $db_table_name WHERE userName = '".$_POST['user']."'")
  $query = mysql_query("SELECT * FROM $db_table 
                        WHERE userName = '".$_POST['user']."'") or die(mysql_error()); //checking the same name 
第3行,更改定义“DB_主机”,“***”;要定义“DB_主机”,请使用“***”;缺少报价

我运行了代码,对连接进行了注释,它没有产生任何错误。我能找到的唯一问题是:

if(!empty($_POST['webmailUserName'])) 
{
    $query = mysql_query("SELECT * FROM $db_table_name WHERE userName = '$_POST[user]'") or die(mysql_error()); //checking the same name in the field

您正在检查并在查询中使用不同的变量。但是,这不会导致语法错误。

您遗漏了post变量$\u post['user']的单引号

$query = mysql_query("SELECT * FROM $db_table_name WHERE userName = '$_POST['user']'") or die(mysql_error()); 

你们有两张不同的$table

您定义了$db_table=emailUser;您使用了$db_table_name

试试这个

mysql_query("SELECT * FROM $db_table_name WHERE userName = '".$_POST['user']."'")
  $query = mysql_query("SELECT * FROM $db_table 
                        WHERE userName = '".$_POST['user']."'") or die(mysql_error()); //checking the same name 
您使用的是$db_table_name,但您只有一个全局$db_table变量。 尽管如此,使用所有函数意味着您没有访问该全局变量的权限,请将其作为参数传递给函数:

function webmailSignUp($db_table_name)
{//code here
}
然后,当调用这些函数时:

webmailSignUp($db_table);
我们将解决这一问题。您可能还想检查您的POST参数是否设置为isset$\u POST['user']。 您还必须研究注入漏洞,如我所说,还有更新的教程,它们没有使用不推荐的扩展。只需通读关于你的问题的各种评论,这些评论链接遍布整个web,一些链接涉及mysql_*被弃用,另一些则涉及PHP中的变量范围

通过将错误报告级别设置为E|u STRICT | E|u ALL,可以触发E|u NOTICE undefined variable警告,您可以更早地发现此错误,并获得更好的错误消息。 将ini文件更改为

error_reporting = E_STRICT | E_ALL
display_errors = 1
或者在PHP代码中:

error_reporting(-1);
ini_set('display_errors',1);
注意:仅在开发时显示错误,绝不在生产代码中显示错误。 无论如何,您这样做的原因是:通知可以帮助您改进代码:如果有错误,请修复它。如果有通知,就发通知。
在这种情况下,您会被告知您的代码试图将一个不存在的变量连接成一个字符串,这是一条比任何mysql错误消息上的嘶嘶声更有用的消息

 $query = mysql_query("SELECT * FROM $db_table_name WHERE
 userName = ".$_POST['user']."") or die(mysql_error());  

请尝试使用以下工具进行调试:

echo$_POST['user']

检查是否返回任何内容。我认为您正在用一个空WHERE语句查看数据库

或者您可以尝试在数据库中测试查询


echo$query

syntax highlighter表示存在语法错误..echo SELECT*FROM$db_table_name,其中userName='$\u POST[user]';,看看你想执行什么。你对$_POST[user]有什么评价吗?不是$db_table吗?你的名字应该是$db_table谢谢大家的评论;我拿走的是:1我正在使用一个贬值的代码,需要谷歌将MySQL改为mysqli。2一个echo SELECT语句,它将告诉我调试过程中发生了什么。3 My db_table/db_table_name变量输入错误。这不会产生该错误。来吧,这是一个复制和粘贴的错误,所以。@deceze嘿,伙计,这里的零钱在$\u帖子中丢失了。我是说美元的指数对不起,什么$foo[bar]在PHP中工作得很好,它是一个简单的字符串插值语法。我已经将此$_POST[user]更改为$_POST['user']是的,您这样做了,这是不必要的。@naveengoyal:阅读Jenz回答下面的注释:这是一个语法错误现在它是一个PHP语法错误,原来的语法已经工作得很好了。实际上,这本身仍然没有帮助:Dang,这就是问题所在+1 MySQL的错误消息总是让我困惑,我总是看错地方。显然和其他人一样@我也花了一些时间。我一直怀疑$_POST['user'],直到我说关于$db_table$db_table_name的评论:你还应该说一些关于错误报告的东西,这会帮助你更早地发现这一点。感谢你发现了错误,$db_table实际上只是作为一个全局变量的$db_table_name。然而我没有意识到你可以调用和传递这样的变量,所以我会修正。PHP代码中的错误报告在哪里重要吗?它能在文档的最后吗?我只是在上传到Internet Explorer的服务器后测试我的PHP。@Smokey:函数和函数参数传递变量就像马车唱爱情和婚姻,你不能没有一个。文档中没有指定错误报告调用的位置,但我总是看到它被放置在脚本的最顶端。尽管如此,设置php.ini文件仍然是安全的选项。无论您选择哪种方式,调用函数都只会影响当前脚本,更改实际的ini文件将影响整个PHP运行时。还要注意,PHP5.4>=,E_STRICT是E_ALL的一部分,因此不需要 按位|运算符