0

我的网站上有一张地图,您可以在这张地图上添加位置和信息。但是在保存并关闭时我得到了这个错误

Data Loaded: <br />
<b>Fatal error</b>:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2005] Unknown MySQL server host '$host' (25)' in /home/sea503/public_html/phpsqlinfo_addrow.php:11
Stack trace:
#0 /home/sea503/public_html/phpsqlinfo_addrow.php(11): PDO-&gt;__construct('mysql:host=$hos...', '**************', '************')
#1 {main}
  thrown in <b>/home/sea503/public_html/phpsqlinfo_addrow.php</b> on line <b>11</b><br />

我的代码看起来像这样

    <?php
require("dbinfo.php");// database connections
// Get parameters from URL
$lat = $_GET["lat"];
$lng = $_GET["lng"];
$name = $_GET["name"];
$time = $_GET["time"];
$description = $_GET["description"];
$sighting = $_GET["sighting"];
//Connect to database
try {
$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);
} catch (PDOException $e) {
 echo 'error :' .$e->getMessage();
}
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    // Prepare INSERT statement new sigting
        $stmt3 = $dbh->prepare("INSERT INTO tbl_maps (ID, map_client_name, client_time, client_lat, client_lng, client_description, client_sighting)  VALUES (NULL, ?, ?, ?, ?, ?, ?)");
        // Assign parameters
        $stmt3->bindParam(1,$name);
        $stmt3->bindParam(2,$time);
        $stmt3->bindParam(3,$lat);
        $stmt3->bindParam(4,$lng);
        $stmt3->bindParam(5,$description);
        $stmt3->bindParam(6,$sighting);
        $stmt3->execute();
        $data[] = array("name"=>$name, "lat"=>round($lat,6), "lng"=>round($lng,6),"time"=>$time,"description"=>$description,"sighting"=>$sighting);
        //Data for success
        echo json_encode($data);
}
catch(PDOException $e) {
    echo "Error Message.". $e->getMessage() ;// Remove or modify after testing 
    file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", phpsqlinfo_addrow.php, ". $e->getMessage()."\r\n", FILE_APPEND);  
}
//Close the connection
$dbh = null; 
?>

这需要 30 秒左右,我最终得到一个错误消息。请有人可以帮我解决这个问题

然后dbinfo是

 $host="41.185.13.51;port=3307"; $database="kruger_park_live"; $username="sean_sql"; $password="******";
4

4 回答 4

1

使用双引号而不是单引号,否则它将$host作为一个值,

$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);

如果您的主机地址中有端口而不是像使用它一样,

$dbh = new PDO("mysql:host=$host;port=$port;dbname=$database",$username,$password);

阅读字符串以获取更多信息。

于 2013-05-27T13:21:22.340 回答
1

您已将错误模式设置为打开并为错误消息使用异常。你没有捕捉到异常,所以你会得到这个错误。

要捕获您将使用trycatch运行的错误。

对于您的代码,它将是这样的:

try {
$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
 echo 'error :' .$e->getMessage();
}

这样你就不会得到错误Uncaught exception 'PDOException' ....

问题出在您的数据库连接中,当您在字符串中使用变量时,您应该使用双引号。

改变 :

$dbh = new PDO('mysql:host=$host;dbname=$database',$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

到(编辑

try {
$dbh = new PDO("mysql:host=$host;port=$port;dbname=$database",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
 echo 'error :' .$e->getMessage();
}

有关异常的更多信息,请参见此处: http: //php.net/manual/en/language.exceptions.php

还要检查所有变量以确保它是正确的。您使用的服务器是否可以访问另一台服务器上的 3307 端口?您确定端口 3307 吗?因为默认是 3306

于 2013-05-27T13:26:25.450 回答
0

您的数据库凭据不正确。

请注意,在以下行中:

$dbh = new PDO('mysql:host=$host;dbname=$database',$username,$password);

您使用了单引号 ' 而不是双引号 " 当您想在字符串中使用 php 变量时,您应该使用双引号。您可以通过两种方式修复此行。

一个)

$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);

二)

$dbh = new PDO('mysql:host='.$host.';dbname='.$database,$username,$password);
于 2013-05-27T13:21:19.373 回答
0

使用双引号而不是单引号。

$dbh = new PDO("mysql:host=$host;dbname=$database",$username,$password);
于 2013-05-27T13:21:33.310 回答