我是PHP的新手。我一直在研究一个简单的表单,它将数据提交到MySQL数据库并且遇到了麻烦。我只是不确定代码中的错误在哪里,任何帮助都会受到赞赏。
<?php
$host = 'localhost'; // hostname
$username = 'root'; // MySQL Username
$password = 'root'; // MySQL Password
$db_name = 'idp'; // Database name
$tbl_name = 'data'; // Table name
// Attempt MySQL Connection
mysql_connect("$host", "$username", "$password")or die("Cannot connect.");
// Attempt database connection
mysql_select_db("$db_name")or die("Cannot select DB.");
$name = $_POST['name'];
$mbr_name = $_POST['mbr_name'];
$mbr_tel = $_POST['mbr_tel'];
$date = $_POST['date'];
$sql = "INSERT INTO $tbl_name(name, mbr_name, mbr_tel, date)VALUES('$name', '$mbr_name', '$mbr_tel', '$date')";
$result = mysql_query($sql);
if($result) {
echo "Entry Successful";
echo "<br>";
echo "<a href='form.php'>Return to Form</a>";
} else {
echo "<strong>Error</strong>";
}
mysql_close();
?>
答案 0 :(得分:1)
我的猜测是,您获得的其中一个输入参数中没有未转义'
或"
个字符。因此,由于非预期的引号字符,您的查询会中断。
要验证是否是这种情况,请在创建sql语句后立即为sql引入另一个print语句,并在查询浏览器中手动运行它,看看它是否有效。
此外,代码中的if($result) {
块会打印出成功或失败消息,而不管发生故障的原因,因此输出信息也不是特别有用。
你应该看看[addslashes][1]
方法来逃避那些引用字符。
您的查询将变成类似
的内容$sql = "INSERT INTO $tbl_name(name, date)VALUES('".addslashes($name)."', '".$date."')";
另外,我建议您查看pdo以获取sql查询而不是mysql_*
个函数。
答案 1 :(得分:1)
删除mysql_connect($host,$username,$password);
上的“”
mysql_select_db($db_name);
这是一个好习惯
$sql = "INSERT INTO $tbl_name(name, mbr_name, mbr_tel, date)VALUES('{$name}','{$mbr_name}','{$mbr_tel}', '{$date}')";
还要检查数据类型的日期。如果您发布的日期是最新的,您可以使用sql函数而不是POST作为日期,例如:
$sql = "INSERT INTO $tbl_name(name, mbr_name, mbr_tel, date)VALUES('{$name}','{$mbr_name}','{$mbr_tel}',NOW())";
答案 2 :(得分:0)
尝试这样查询:
$sql = "INSERT INTO $tbl_name(name, mbr_name, mbr_tel, date)VALUES('".$name."', '".$mbr_name."', '".$mbr_tel."', '".$date."')";
答案 3 :(得分:0)
您的代码已弃用,请使用Zend_db_ *类引用Zend类加载器。
[http://framework.zend.com/manual/1.12/fr/zend.db.statement.html] [1]
PS:Zend是一个框架,您可以使用任何流行的框架,如Yii,CakePhp等。