繁体   English   中英

MySQL PHP查询问题

[英]MySQL PHP Query Issues

我在PHP中使用MySQL查询需要一些帮助

在我不再使用mysql_*函数之前,我知道它们已被贬值,但是仅从PHP v5.5开始,并且我在服务器上安装了PHP 5.3,而其他mysql_*函数正在运行该函数。

我正在尝试将表单中的值插入表单提交中的表格中,代码在正确的位置,因为PHP发送了电子邮件,并且回显了“已发送的邮件”。

这是我的查询:

mysql_query("INSERT INTO customers (
    name,email,telephone
) VALUES (
    ".$_POST['name'].",
    ".$_POST['email'].",
    ".$_POST['telephone'].",
)");

这是它所在的文档:

<?php

    // Database connect
    $db_host        = 'localhost';
    $db_user        = 'redjaxco';
    $db_pass        = 'CORRECT PASSWORD';
    $db_database    = 'redjaxco_website'; 

    $link = mysql_connect($db_host,$db_user,$db_pass) or die('Unable to establish a DB connection');

    mysql_select_db($db_database,$link);
    mysql_query("SET names UTF8");

    $owner_email = "contact@red-jax.com";

    $headers = 'From:' . $_POST["email"];
    $subject = 'Online Form - '. $_POST["topic"]. " : " . $_POST["name"];
    $messageBody = "";

    if($_POST['topic']!='nope'){
        $messageBody .= '<p>Subject: ' . $_POST["topic"] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }
    if($_POST['name']!='nope'){
        $messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }
    if($_POST['email']!='nope'){
        $messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }else{
        $headers = '';
    }
    if($_POST['phone']!='nope'){        
        $messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n";
        $messageBody .= '<br>' . "\n";
    }
    if($_POST['message']!='nope'){
        $messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
    }

    if($_POST["stripHTML"] == 'true'){
        $messageBody = strip_tags($messageBody);
    }

    try{
        if(!mail($owner_email, $subject, $messageBody, $headers))
        {
            throw new Exception('mail failed');
        }
        else
        {
            mysql_query("INSERT INTO customers (
                name,email,telephone
            ) VALUES (
                ".$_POST['name'].",
                ".$_POST['email'].",
                ".$_POST['telephone'].",
            )");

            echo 'mail sent';
        }
    }catch(Exception $e){
        echo $e->getMessage() ."\n";
    }
?>

对于调试,通常的模式是在将SQL文本发送到数据库之前将其打印出来,如下所示:

$querytext = "INSERT INTO customers (
            name,email,telephone
        ) VALUES (
            '".mysql_real_escape_string($_POST['name'])."',
            '".mysql_real_escape_string($_POST['email'])."',
            '".mysql_real_escape_string($_POST['telephone'])."',
        )";
echo "querytext=" . $querytext;  // display statement for debugging
mysql_query($querytext) or die(mysql_error());

检查该语句是否真正成功,如果没有成功,则可以得到一些可以使用的输出,而不是将Dr.Evil小指拉到嘴角“我只是假设它将一切都按计划进行。什么?”

并且请帮自己一个大忙,并对这些输入进行消毒,如下所示:

    mysql_real_escape_string($_POST['name'])

为了回答您的问题,查询失败的最可能原因是语句中的字符串文字没有用引号引起来。

相比:

... VALUES (paul,paul@foo.com,5551212) 

... VALUES ('paul','paul@foo.com','5551212') 

并清理这些输入,以处理诸如'O'Reilly'O'Reilly名称

... VALUES ('O'Reilly','ore@me.org','5551212')

还有更令人不安的客户,例如小鲍比桌子...

"Robert','',''); DROP TABLE customers; -- "

我并不是很喜欢这样说,但是我会告诉您在查询中添加错误处理ie or die(mysql_error()) ,例如:

mysql_select_db($db_database,$link) or die(mysql_error());
mysql_query("SET names UTF8")or die(mysql_error());

我什至不知道第二个查询的作用,但是添加错误处理将为您提供一个可以理解的错误,至少可以使用。

编辑

 mysql_query("INSERT INTO customers (
                name,email,telephone
            ) VALUES (
                '".$_POST['name']."',
                '".$_POST['email']."',
                '".$_POST['telephone']."'
            )") or die(mysql_error());

编辑-2

好的,默认情况下您可能会关闭错误,因此请将其写在脚本顶部。

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

编辑-3

 if(!mail($owner_email, $subject, $messageBody, $headers))
        {
            echo 'Email not sent';
        }
        else
        {
        mysql_query("INSERT INTO customers ( name, email, telephone 
                        ) VALUES (
                        '".$_POST['name']."',
                        '".$_POST['email']."',
                        '".$_POST['telephone']."')
                    ") or die(mysql_error());

            echo 'mail sent';
        }

您需要将字符串用单引号引起来,并在值列表的末尾消除逗号:

mysql_query("INSERT INTO customers (
            name,email,telephone
        ) VALUES (
            '".$_POST['name']."',
            '".$_POST['email']."',
            '".$_POST['telephone']."'
        )");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM