PHP mySQL代码没有发布到数据库?

时间:2012-03-07 02:33:37

标签: php mysql database phpmyadmin

我正在处理从表单提交到数据库的数据,但是,每当我提交时,没有错误,我的数据从未出现在我的数据库中。任何人都可以帮我提供一些关于我可能做错了什么的信息吗?我正在使用phpMyAdmin来查看我的表格。 谢谢, 斯蒂芬

<?php

$user= $_POST["txtUser"];
$fName= $_POST["txtFname"];
$lName= $_POST["txtLname"];
$email= $_POST["txtEmail"];
$date= date("r"); 



$dbh=mysql_connect('webdb.uvm.edu','swakita','MYPASSWORD');

if (!$dbh)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("SWAKITA", $dbh);

if (isset($_POST['butSubmit'])) {
mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES (" . $user . "," . $fName .     "," . $Lname . ", '4', '0', $date, $email)");
mysql_close();
print $user;
}
?>

修改 抛出此错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

这是我目前的代码:

<?php

$user= $_POST["txtUser"];
$fName= $_POST["txtFname"];
$lName= $_POST["txtLname"];
$email= $_POST["txtEmail"];
$date= date("r"); 



$dbh=mysql_connect('webdb.uvm.edu','swakita','efaemaey');

if (!$dbh)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db('SWAKITA', $dbh);

if (isset($_POST['butSubmit'])) {
mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES (' mysql_real_escape_string($user)', 'mysql_real_escape_string($fName)', 'mysql_real_escape_string($Lname)', '4', '0', 'mysql_real_escape_string($date)', 'mysql_real_escape_string($email)'");
if (mysql_errno()) {
echo $sql . "<br/>\n" . mysql_error();
}
mysql_close();
print $user;
}
?>

编辑编辑 我在'mysql_real_escape_string($ email)'之后错过了一个括号,但现在它发布的是“mysql_real_escape_string(示例名字)”,而不仅仅是值。我的括号现在做错了什么?

2 个答案:

答案 0 :(得分:3)

如果您直接在查询中使用来自POST请求的字段,则您很容易受到SQL injection的攻击,请先将其转义。

$user = mysql_real_escape_string($_POST["txtUser"]);
...

要查看问题,请检查mysql_query

的结果
mysql_query(...);
if (mysql_errno()) {
    echo $sql . "<br/>\n" . mysql_error();
}

我认为问题在于你没有在像user这样的字段中加引号。

VALUES (" . $user . "," . $fName . ", ...

应该是:

VALUES ('" . $user . "', '" . $fName . "', ...

或更简单:

VALUES('$user', '$fName', ...

如果你用双引号引用你的字符串“,你可以在字符串中使用$ variable并且它们将被评估,而如果你使用用单引号分隔的字符串',它将字面上打印$ variable。

答案 1 :(得分:1)

mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES ('" . mysql_real_escape_string($user) . "','" . mysql_real_escape_string($fName) .     "','" . mysql_real_escape_string($Lname) . "', '4', '0', '".mysql_real_escape_string($date)."', '".mysql_real_escape_string($email')."'");

你需要用'单引号包装字符串。请妥善逃脱或被黑客攻击。 mysql_real_escape_string()会有所帮助。