PHP Where子句语法

时间:2014-02-25 10:07:52

标签: 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','***');
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();
}
?>

7 个答案:

答案 0 :(得分:3)

您使用的是$db_table_name,但您只有 全球 $db_table变量。
尽管如此,使用所有函数意味着可以访问该全局变量,将其作为参数传递给函数:

function webmailSignUp($db_table_name)
{//code here
}

然后,当你调用这些函数时:

webmailSignUp($db_table);

会解决这个问题。您可能还想检查是否设置了POST参数(isset($_POST['user'])) 您还 必须查看注入漏洞,就像我说的那样,较新的教程,它们不使用已弃用的扩展。只需阅读链接到整个网络的问题的各种评论,一些链接处理mysql_*被弃用,其他链接处理PHP中的变量范围。

您可以通过将错误报告级别设置为E_STRICT | E_ALL来提前发现此错误(并且您可以获得更好的错误消息),这会触发E_NOTICE未定义的变量警告。
将ini文件更改为

error_reporting = E_STRICT | E_ALL
display_errors = 1

或者在您的PHP代码中:

error_reporting(-1);
ini_set('display_errors',1);

注意:仅在开发时显示错误 从不在生产代码中执行此操作
无论如何,你这样做的原因是:通知可以帮助你改进你的代码:如果有错误,修复它。如果有通知,付费通知 在这种情况下,你会被告知你的代码试图将一个不存在的变量连接成一个字符串,这是一个比任何 mysql错误消息更有用的消息

答案 1 :(得分:1)

请尝试调试:

echo $_POST['user'];

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

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

echo $query;

答案 2 :(得分:0)

试试这个

mysql_query("SELECT * FROM $db_table_name WHERE userName = '".$_POST['user']."'")

答案 3 :(得分:0)

你有两个不同的$ table

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

试试这个

  $query = mysql_query("SELECT * FROM $db_table 
                        WHERE userName = '".$_POST['user']."'") or die(mysql_error()); //checking the same name 

答案 4 :(得分:-1)

第3行,将define('DB_HOST', '***);更改为define('DB_HOST', '***');(错过报价)。


我运行了代码(here,注释了连接)并且它不会产生任何错误。我能找到的唯一问题是:

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

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

答案 5 :(得分:-2)

你的问题出现是因为你的查询错误只是把双引号“”而不是单个''像这样

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

答案 6 :(得分:-4)

你错过了post变量的单引号($ _POST ['user'])

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