我在model里使用了远程mysql,连接信息如下
protected $connection = array( // 数据库类型 'db_type' => 'mysql', // 服务器地址 'db_host' => '', // 数据库名 'db_name' => '', 'db_port' => '3306', // 数据库用户名 'db_user' => '', // 数据库密码 'db_pwd' => '', // 数据库编码默认采用utf8 'db_charset' => 'utf8', 'db_params' => array(PDO::ATTR_PERSISTENT => true), );
'db_params' => array(PDO::ATTR_PERSISTENT => true),的用途是数据库长连接。
使用后提示pdo找不到。先使用phpinfo查看是不是有pdo 和pdo_mysql. 如果有,应该是代码的问题。如果没有则要添加扩展。
百度搜索到如下资料:(如果不用这种方法,也可以在model php文件中加上 use PDO解决,也就是全名空间的问题)
本来我想在thinkphp3.2.2中用pdo方式连接mysql数据库,但我在调试的时候就以连接mysql作测试,我发现用pdo连接mysql都有问题,比方说我不在3.2框架里写这样一段代码:
$dsn = 'mysql:dbname=onethink;host=localhost;port=3306';
$username = 'root';
$password = '123456';
$db=new Pdo($dsn, $username, $password);
$sql="select * from onethink_menu";
$prepare=$db->prepare($sql);
$prepare->execute();//添加条件数据
$table = $prepare->fetchAll();
var_dump($table);
测试通过。但我如果将这段代码放在admin下index控制器里:
namespace Admin\Controller;
use Think\Controller;
use Think\Db\Driver;
class IndexController extends Controller {
public function index(){
$dsn = 'mysql:dbname=onethink;host=localhost;port=3306';
$username = 'root';
$password = '123456';
$db=new Pdo($dsn, $username, $password);
$sql="select * from onethink_menu";
$prepare=$db->prepare($sql);
$prepare->execute();//添加条件数据
$table = $prepare->fetchAll();
var_dump($table);
}
}
在这里测试就会出现以下错误:
:(
Class 'Admin\Controller\PDO' not found
错误位置
FILE: E:\xampp\htdocs\GhpArchives\Application\Admin\Controller\IndexController.class.php LINE: 11
请问这个问题怎么解决?是还要调用什么命名空间吗?在配置文件里用pdo调用我测试了是没问题的。
解决方法: $db=new \PDO($dsn, $username, $password);即可,虽然我也不知道什么原因!