我有这样的代码:
try {
$this->_connect = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
$this->_connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $this->_connect->query('SHOW TABLES FROM '.DB_NAME, PDO::FETCH_ASSOC);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
foreach ($row as $key => $value) {
$this->_schema[$value] = "";
}
}
foreach ($this->_schema as $key => $value) {
$stmt = $this->_connect->query('SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, CHARACTER_MAXIMUM_LENGTH '.
"FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '$key'");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$this->_schema[$key][] = $row;
}
}
foreach ($this->_schema as $key => $value) {
$colData = null;
foreach ($this->_schema[$key] as $keyTwo => $valueTwo) {
foreach ($this->_schema[$key][$keyTwo] as $keyThree => $valueThree) {
$colData[][$keyThree] = $valueThree;
}
}
$this->$key = new Table($colData);
}
}
catch(PDOException $e) {
echo $e->getMessage();
}
if (isset($stmt))
$stmt->closeCursor();
}
}
Class Table {
public $select;
public $update;
public $delete;
public $insert;
public $replace;
private $_columns;
public function __construct($colData) {
$this->select = new Select;
$this->update = new Update;
$this->delete = new Delete;
$this->insert = new Insert;
$this->replace = new Replace;
$this->_columns = $colData;
var_dump($this->_columns[0]);
}
它试图从数据库中获取整个模式。当我var_dump它时,$this->_schema看起来很好,所以我认为问题是在它完成之后。我试图遍历数据库,获取每个表的元数据并将该数据存储在数组中。然后,对数组进行迭代,为每个表创建一个新的Table对象,并向它发送我提取的列数据数组。我今天大部分时间都在看这段代码,不知道我哪里出错了。
当我在最后一行变量dump时,它是这样转储的:
array(1) { ["COLUMN_NAME"]=> string(4) "type" } array(1) { ["COLUMN_NAME"]=> string(8) "username" } array(1) { ["COLUMN_NAME"]=> string(2) "id" }
是错误的——它是表1的列名,列1;表2,列1;表3,第1列。它应该是表1第1列的名称、数据类型、默认值和最大长度。
谁能看到我哪里错了或建议一个更好的方法去做这个?
我终于修复了它。我取出了第三个foreach(不必要的),并将$keyTwo下的整个数组分配给$colData[$keyTwo],它按照我的计划工作。