Php Mysql到PDO的代码转换

Php Mysql到PDO的代码转换,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我是PHP领域的新手,我正在尝试解决朋友网站上的一个bug。但是,在本地主机上测试时遇到了一个基本问题 从本质上讲,该网站是旧的,并且使用了不推荐使用的mysql命令。尽管mysql查询贯穿整个代码,但我只需要修改bug所在的几个文件 但是,在所有php文件中使用的config.inc文件中,包含以下行: define("ML",mysql_connect("localhost:/tmp/aaaaa.sock","dbocccccccc","pass"),true); defin

我是PHP领域的新手,我正在尝试解决朋友网站上的一个bug。但是,在本地主机上测试时遇到了一个基本问题

从本质上讲,该网站是旧的,并且使用了不推荐使用的mysql命令。尽管mysql查询贯穿整个代码,但我只需要修改bug所在的几个文件

但是,在所有php文件中使用的config.inc文件中,包含以下行:

    define("ML",mysql_connect("localhost:/tmp/aaaaa.sock","dbocccccccc","pass"),true);
    define ("DB",mysql_select_db("dbcccccccc"));
将此转换为PDO时,我收到一个致命错误ad PDO异常:

    define("ML", new PDO('mysql:host=localhost/tmp/aaaaa.sock;dbname = dbcccccccc', 'dbocccccccc','pass'), true);
我猜我的语法在某些方面是不正确的,但是当我尝试与上面相同的简单直接连接到数据库时,如果没有定义,我会得到以下错误:

Error : SQLSTATE[HY000] [1045] Acces denied for user 'dbocccccccc'@'@localhost' (password: YES)
这双@让我很烦。输入是相同的更改密码和数据库名称的隐私,但这都是在网站上找到的来源

那么,问题是什么?这里有什么问题吗?

您可以尝试指定unix\u socket=/tmp/aaaa.sock而不是host=

更详细地描述了选项。

根据Php手册页

new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'user', 'xxx', array( PDO::ATTR_PERSISTENT => false));

你不能这样定义常数。定义的常量只能有标量值。PDO对象不是标量。换句话说,您的代码不可能在没有完全重新编译的情况下进行转换-write@MarcB还可以定义资源,例如PDO对象?:可以定义资源常量,但不建议这样做,可能会导致不可预测的行为。此外,错误是关于连接问题,而不是非法转换为标量,或者我不知道php将如何命名。没有小的解决方法可以让人做到这一点吗?我对include文件一点也不熟悉,但这似乎相当令人惊讶。或者,如果我能让mysql正确地显示出来,尽管它可能被弃用,我可以做我想做的测试。我只需要在重新设计之前解决这个错误。顺便说一句,谢谢大家的回答。@FélixGagnon Grenier:资源常量只是一个整数。例如,FILE_UPLOAD_ERR_OK只是表示0的另一种方式,但那仍然只是一个整数。PDO对象是一个活的/呼吸的东西,而不是一个死的数字。就像上面说的,可能会导致不可预知的行为。如果您尝试此操作并从doc:unix\u socket获得Heisenbug,那么祝您调试系统好运:MySQL unix socket不应与主机或端口一起使用。而op正试图将套接字用于host@FélixGagnon Grenier这是非此即彼的事情。指定主机和可选端口,或使用unix_套接字方法。该配置字符串意味着它需要一个套接字。MySQL访问控制系统对套接字上的本地连接的处理与IP连接不同,即使是对本地主机的连接。添加阵列部分会产生未知的网络错误。更改为unix_套接字和/或删除.sock扩展会产生与我第一次提到的相同的连接错误。您不应该删除.sock扩展。您应该指定套接字的实际完整路径。ls-l/tmp/aaaaa.sock或其他任何名称是否显示套接字文件?我在windows上,使用Wampserver。我有油灰,但我不确定我到底该怎么做你要我做的检查。