[英]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.