消息为“无效数据源名称”的未捕获异常“ PDOException”

时间:2018-07-04 04:00:47

标签: php fatal-error

我知道关于stackoverflow的问题很多,但我都读了全部,但是我没有解决,所以我问了一个新问题。我有一个名为article.php的文件,并且我有此代码init。只是显示错误的代码。

public static function getById( $id ) {
$conn = new PDO( DB_HOST, DB_USERNAME, DB_PASSWORD );
$sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles WHERE id = :id";
$st = $conn->prepare( $sql );
$st->bindValue( ":id", $id, PDO::PARAM_INT );
$st->execute();
$row = $st->fetch();
$conn = null;
if ( $row ) return new Article( $row );

我收到此错误:

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in C:\wamp64\www\classes\Article.php on line 102
( ! ) PDOException: invalid data source name in C:\wamp64\www\cms\classes\Article.php on line 102

我的配置文件看起来像

ini_set( "display_errors", true );
define( "DB_HOST", "localhost" );
define( "DB_USERNAME", "username" );
define( "DB_PASSWORD", "" );
define('DB_NAME', 'name');

您能告诉我为什么会发生这种情况以及我在哪里出错。谢谢

1 个答案:

答案 0 :(得分:0)

您当前的代码似乎以前与mysqlmysqli连接器一起使用,但是PDO更为通用,并支持多个数据库供应商,而不仅仅是MySQL。因此,您需要告诉PDO要连接哪个数据库,等等。

因此PDO仅使用数据库名称无法建立连接,您的DB_HOST必须与此类似:

define('DB_HOST','mysql:host=localhost;dbname=testdb');

更多连接选项:

mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
  

获取此错误mysqli_real_escape_string()恰好需要2个参数,给定1个

由于您正在使用PDO,因此不需要。改用PDO的API。