我试图让我的查询工作,我似乎无法找到它的错误。这是从btw。
//Connection
$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect.");
$selected = mysql_select_db("fblaWebsite",$dbhandle) or die("Could not select the database");
//execute the SQL query
$insertQuery = "INSERT INTO Bookings (band, occasion, placeName, address, city, state, email, firstName, lastName, comments, ticketsForSale, phoneNumber, ticketPrice, date, time)
VALUES ('$band', '$occasion', '$placeName', '$address', '$city', '$state', '$email', '$firstName', '$lastName', '$comments', '$ticketsForSale', '$phoneNumber', '$ticketPrice', '$date', '$time')";
if(mysql_query($insertQuery)){
echo "Form Successfully Submited!";
}
else{
echo "Error Submiting Form!";
}
我似乎无法找到错误。我只是不断收到“提交表单时出错!”
答案 0 :(得分:2)
正如其他人所推荐的那样,PDO会对此非常有帮助。
但是,由于您的问题不是使用PDO,而我没有看到变量的值,我建议您在其他情况下调用mysql_error(),然后将其输出到屏幕(在仅开发!)以便查看MySQL的最后一个错误。
这将为您解决特定问题提供一个起点。
我还提出了关于确保清理输入值的建议,并确保没有有害值被替换为sql语句。如果您不使用它,我可以推荐mysql_escape_string。
请记住,vanilla mysql驱动程序将在5.5中弃用。认真考虑升级到MySQLi或PDO以避免在PHP 5.5环境中破坏代码!
以下是PHP关于弃用和更改为其中一种新机制的常见问题解答:Why is the MySQL extension (ext/mysql) that I've been using for over 10 years discouraged from use? Is it deprecated? What do I use instead? How can I migrate?
答案 1 :(得分:1)
下面的代码应该让您开始连接到PDO,并像您的示例一样执行简单的插入查询。
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
try {
//connect as appropriate as above
$stmt = $db->prepare("INSERT INTO Bookings (band, occasion, placeName, address, city, state, email, firstName, lastName, comments, ticketsForSale, phoneNumber, ticketPrice, date, time) Values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?");
$stmt->execute(array($band, $occasion, $placeName, $address, $city, $state, $email, $firstName, $lastName, $comments, $ticketsForSale, $phoneNumber, $ticketPrice, $date, $time));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $ex) {
echo "An Error occured!"; //user friendly message
//The line below will echo the error message from the query if there is one.
//echo $ex->getMessage();
}
答案 2 :(得分:1)
你不需要pdo来得到答案。只需使用这样的东西。使用它进行测试,它会让你知道错误的位置。
$result = mysql_query($query) or die("Bad query 1: " .mysql_error());
现在......看看我说你不需要PDO的票数是多少。
您也可以在程序代码中执行prepared statements
。学习这种方法是一个好主意,否则你将永远回过头来防止sql注入十几种不同的方式。
编辑:
我忘了说你应该转到mysqli
语句,而不是旧的折旧mysql
语句。你找到的机会就是10岁。学习php和sql是一次发现之旅,如果你走错了路会有所帮助。我会看一下这个例子。 http://us1.php.net/manual/en/mysqli.query.php
编辑:
正如丹尼斯指出的那样,你应该学习Mysqli Prepared Statements
。在这个时刻它会变得更聪明,你仍然可以使用程序代码。 Stackoverflow上有很多关于如何做这些的例子。 mysqli_stmt_fetch returns number