我的mySQL查询有什么问题?

时间:2013-11-26 21:48:48

标签: php mysql

我试图让我的查询工作,我似乎无法找到它的错误。这是从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!";
        }

我似乎无法找到错误。我只是不断收到“提交表单时出错!”

3 个答案:

答案 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