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

Php 未捕获异常“PDOException”,消息为“无效数据源名称”,php,fatal-error,Php,Fatal Error,我知道有很多关于stackoverflow的问题,但我都读了,但我的问题没有解决,所以我问了一个新问题。我有一个名为article.php的文件,我有this code init。只是一个显示错误的代码 public static function getById( $id ) { $conn = new PDO( DB_HOST, DB_USERNAME, DB_PASSWORD ); $sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS p

我知道有很多关于stackoverflow的问题,但我都读了,但我的问题没有解决,所以我问了一个新问题。我有一个名为article.php的文件,我有this code 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');

你能告诉我为什么会这样,我在哪里犯了错误吗。谢谢

您当前的代码以前似乎用于mysql或mysqli连接器,但是PDO更通用,支持多个数据库供应商,而不仅仅是mysql。所以你需要告诉PDO连接哪个数据库,等等

因此,PDO无法仅使用db名称进行连接,您的db_主机必须与此类似:

定义'DB_HOST','mysql:HOST=localhost;dbname=testdb'

更多连接选项:

mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
获取此错误mysqli\u real\u escape\u字符串需要2个参数,给定1个参数


您不需要这个,因为您正在使用PDO。请改用PDO的API。

可以展开答案吗?现在我收到这个错误,mysqli_real_escape_字符串需要2个参数,1个给定$sql=SELECT sql_CALC_FOUND_ROWS*,UNIX_TIMESTAMPpublicationDate作为文章排序依据中的publicationDate。mysqli\u real\u escape\u字符串$order。限值:numRows@yoyoy不混合API。使用事先准备好的陈述。在这里寻求帮助之前,请研究更多信息。现在如何使用此代码“$sql=选择sql\u CALC\u FOUND\u ROWS*,UNIX\u TIMESTAMPpublicationDate作为文章订购者中的publicationDate”。mysqli\u real\u escape\u字符串$order。限制:numRows在发布前阅读手册总是一个好主意:所以链接:和