0

我正在使用 php 和 html 构建一个网站,我习惯于从数据库接收数据,也就是动态网站,我已经构建了一个 CMS 供我自己使用。我试图“简化”使用 php 和函数的接收过程。

我的 Functions.php 看起来像这样:

function get_db($row){
        $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"];
        $dsn = $GLOBALS["dsn"];
        try {
            $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]);
            $stmt = $pdo->prepare("SELECT * FROM lp_sessions");
            $stmt->execute();
            $row = $stmt->fetchAll();
            foreach ($row as $row) {
                echo $row['session_id'] . ", ";
            }
        }
        catch(PDOException $e) {
            die("Could not connect to the database\n");
        }
    }

我将在哪里获得这样的行内容:$row['row']; 我试图这样称呼它:下面的代码片段来自 index.php

echo get_db($row['session_id']); // Line 22

只是为了显示所有行中的内容。当我运行该代码片段时,我收到错误:

注意:未定义变量:第 22 行 C:\wamp\www\Wordpress ish\index.php 中的行

我也在使用 PDO,所以你会知道 :)

任何帮助深表感谢!

问候斯蒂安

编辑:更新的functions.php

function get_db(){
        $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"];
        $dsn = $GLOBALS["dsn"];
        try {
            $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]);
            $stmt = $pdo->prepare("SELECT * FROM lp_sessions");
            $stmt->execute();
            $rows = $stmt->fetchAll();
            foreach ($rows as $row) {
                echo $row['session_id'] . ", ";
            }
        }
        catch(PDOException $e) {
            die("Could not connect to the database\n");
        }
    }
4

2 回答 2

1

该函数不应回显数据库中的值,而是应将它们作为字符串返回。

function get_db(){
    $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"];
    $dsn = $GLOBALS["dsn"];
    $result = '';
    try {
        $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]);
        $stmt = $pdo->prepare("SELECT * FROM lp_sessions");
        $stmt->execute();
        $rows = $stmt->fetchAll();
        foreach ($rows as $row) {
            $result .= $row['session_id'] . ", ";
        }
    }
    catch(PDOException $e) {
        die("Could not connect to the database\n");
    }
    return $result;
}

然后将其称为:

echo get_db();

另一种选择是让函数将会话 ID 作为数组返回:

function get_db(){
    $dsn = "mysql:host=".$GLOBALS["db_host"].";dbname=".$GLOBALS["db_name"];
    $dsn = $GLOBALS["dsn"];
    $result = array();
    try {
        $pdo = new PDO($dsn, $GLOBALS["db_user"], $GLOBALS["db_pasw"]);
        $stmt = $pdo->prepare("SELECT * FROM lp_sessions");
        $stmt->execute();
        $rows = $stmt->fetchAll();
        foreach ($rows as $row) {
            $result[] = $row['session_id'];
        }
    }
    catch(PDOException $e) {
        die("Could not connect to the database\n");
    }
    return $result;
}

然后你会用它作为:

$sessions = get_db(); // $sessions is an array

然后调用者可以使用数组中的值,也许将它们用作其他调用中的键,而不仅仅是打印它们。

于 2013-05-21T15:46:21.260 回答
1

正如 antoox 所说,而是一个完整的变更集;在两个地方将行更改为行:

        $rows = $stmt->fetchAll();
        foreach ($rows as $row) {
            echo $row['session_id'] . ", ";
        }

将其放在脚本开头的<?php行之后将输出有趣的警告:

error_reporting(E_ALL|E_NOTICE);

要只输出一行,假设数据库表有一个名为的字段id,并且您要获取 id=1234 的行:

$stmt = $pdo->prepare("SELECT * FROM lp_sessions WHERE id=?");
$stmt->bindValue(1, "1234", PDO::PARAM_STR);

我选择了 PDO::PARAM_STR 因为它可以同时处理字符串和整数。

于 2013-05-21T15:44:23.757 回答