php - 如何使用getColumnMeta?

标签 php mysql pdo

目前我使用 MySQLi,并尝试将所有 MySQLi 转换为 PDO。

在 MySQLi 中,我有这段代码,它工作得很好:

// connection string in MySQLi

if ($query = $connection->prepare("SELECT u.ID as ID,
                          u.Username as Username,
                          u.Firstname as Firstname,
                          u.Lastname as Lastname,
                          // ... many more
                     FROM Users u
               INNER JOIN Gender g ON u.Gender = g.id
                          // ... many more
                    WHERE u.ID = ?")) {

$query->bind_param('s', $_SESSION['ID']);
$query->execute();
$metaResults = $query->result_metadata();
$fields = $metaResults->fetch_fields();
$statementParams = '';

foreach ($fields as $field) {
    if (empty($statementParams)) {
        $statementParams.="\$column['" . $field->name . "']";
    } else {
        $statementParams.=", \$column['" . $field->name . "']";
    }
}

$statment = "\$query->bind_result($statementParams);";

eval($statment);
$query->store_result();

$affected = $query->num_rows;
// this request return me only ONE row

if ($affected == 1) {
    while ($query->fetch()) {
        foreach ($column as $key => $value) {
            if ($key == "lookingFor") {
                $row_tmb[$key] = formatLookingFor($value, $language, "");
            } else {
                $row_tmb[$key] = utf8_encode($value);
                $row_tmb[$key] = $value;
            }
        }

        $results[] = $row_tmb;
    }

    $query->free_result();
    $query->close();

    $profileData = $results[0];
    // ... other code    
}

这是返回我的所有列名称和所有 1 个数据行,我很高兴。因此,我尝试使用新的 PDO 代码将此代码转换为 PDO:

// good connection string without error in PDO code and the same query as you see up.
if ($query = $connection->prepare($sql)) {
    $query->execute();
    $metaResultsColNumber = $query->columnCount();

    for ($i = 0; $i < $metaResultsColNumber; $i++) {
        $metaResults[] = $query->getColumnMeta($i, ['name']);
    }
    var_dump($metaResults);

    $fields = $metaResults->fetchColumn();
    var_dump($fields);
    $statementParams = '';

    foreach ($fields as $field) {
        if (empty($statementParams)) {
            $statementParams.="\$column['" . $field->name . "']";
        } else {
            $statementParams.=", \$column['" . $field->name . "']";
        }
    }
    $statment = "\$query->bind_result($statementParams);";

    eval($statment);
    $query->store_result();

    $affected = $query->num_rows;

    // TRACE
    printf("SQL %d row(s) return", $affected);

    if ($affected == 1) {
        while ($query->fetch()) {
            foreach ($column as $key => $value) {
                if ($key == "lookingFor") {
                    $row_tmb[$key] = formatLookingFor($value, $language, "");
                } else {
                    $row_tmb[$key] = utf8_encode($value);
                }
            }

            $results[] = $row_tmb;
        }

        $query->free_result();
        $query->close();

        $profileData = $results[0];

我无法获取 1) 正确的列名称 2) 返回行的数据

我花了很多时间尝试阅读该网站的帮助信息和 PHP MySQL PDO 文档。

最佳答案

你在寻找类似的东西吗?

//Datastrucure 
include("pdo_dbconnect.php");
$stmt = $db->prepare('select * from information_schema.columns where table_name = "' . $_SESSION[$fenster .'_tabelle'] . '" and table_schema = "' .$database.'"');
$stmt->execute();

$f = -1;
while ($data = $stmt->fetch()) {
    $f += 1;
    //pmsg($data['COLUMN_NAME'] . ' ' .$data['DATA_TYPE'] . ' ' . $data['CHARACTER_MAXIMUM_LENGTH']);
    $_SESSION['_fieldName'][$f] = $data['COLUMN_NAME'];
    $_SESSION['_fieldLenght'][$f] = $data['CHARACTER_MAXIMUM_LENGTH'];
    $_SESSION['_extra'][$f] = $data['EXTRA'];
}   

关于php - 如何使用getColumnMeta?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558752/

相关文章:

PHP PDO Prepared Statement参数导致错误

php - Aside 和 Article 重叠标题

php - Laravel 4 - 工作台中的一项迁移可以回滚,而其他迁移则不能

php - PDO更新语句的正确写法

PHP MySQL 从 Require() 文件获取连接

mysql - 整数列的不合逻辑的 SQL 超出范围值

php - 在没有找到记录时插入数据,否则使用 PHP Mysql 使用最后插入的 ID 更新前一条记录

php - 使用 PHP PDO 从 CSV 错误插入循环

php - 如何使用 composer 安装 Zend Framework 2 工具

php - 来自 MariaDB、Drupal、php 的 UTF-8 字符