用于获取正确行的 MySQL 动态链接



我有一个包含x行的MySQL数据库。现在我想解释一个链接,获取正确的行并打印此值。

例如链接:.html?row=3 -> 打开获取第 3 行并打印它们的站点。

.html?row=1000 -> 打开获取第 1000 行并打印它们的站点

我不知道如何连接这个动态链接和数据库。我只能在手动选择行时打印数据库。

<?php
require_once ('../mysql/config.php');
$db_link = mysqli_connect (
                 MYSQL_HOST, 
                 MYSQL_BENUTZER, 
                 MYSQL_KENNWORT, 
                 MYSQL_DATENBANK
                );
mysqli_set_charset($db_link, 'utf8');
if (!$db_link) {
die('keine Verbindung möglich: ' . mysql_error());
} 
$sql = "SELECT * FROM Tabelle1";
$db_erg = mysqli_query( $db_link, $sql );
?>
if ( ! $db_erg )
      {
        die('Ungültige Abfrage: ' . mysqli_error());
      }
      while ($row = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
      {
        echo $row['B'];
        echo $row['E'];
      }
      mysqli_free_result( $db_erg );
      ?>

mysql/data_access.php

<?php
/*
 * ---------------------
 * Data access functions
 * ---------------------
 */
/**
 * Create a new db connection.
 * 
 * @param string $host Host.
 * @param string $dbname Database name.
 * @param string $username Username.
 * @param string $password Password.
 * @param string $port [optional] Port.
 * @param array $charset [optional] Character set.
 * @param array $options [optional] Driver options.
 * @return PDO Db connection.
 */
function createConnection($host, $dbname, $username, $password, $port = '3306', $charset = 'utf8', $options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_PERSISTENT => true,
)) {
    $dsn = getDsn($host, $dbname, $port, $charset);
    $connection = new PDO($dsn, $username, $password);
    foreach ($options as $key => $value) {
        $connection->setAttribute($key, $value);
    }
    return $connection;
}
/**
 * Create a mysql DSN string.
 * 
 * @param string $host Host.
 * @param string $dbname Database name.
 * @param string $port [optional] Port.
 * @param array $charset [optional] Character set.
 * @return string DSN string.
 */
function getDsn($host, $dbname, $port = '3306', $charset = 'utf8') {
    $dsn = sprintf('mysql:host=%s;port=%s;dbname=%s;charset=%s'
            , $host
            , $port
            , $dbname
            , $charset
    );
    return $dsn;
}
/**
 * Close a db connection.
 * 
 * @param PDO $connection Db connection.
 * @return void
 */
function closeConnection($connection) {
    $connection = NULL;
}
/**
 * Get the data type of a binding value.
 * 
 * @param mixed $value Binding value.
 * @return mixed Data type of the binding value.
 */
function getInputParameterDataType($value) {
    $dataType = PDO::PARAM_STR;
    if (is_int($value)) {
        $dataType = PDO::PARAM_INT;
    } elseif (is_bool($value)) {
        $dataType = PDO::PARAM_BOOL;
    }
    return $dataType;
}

error_reporting.php

<?php
/*
 * -------------------------
 * Error reporting functions
 * -------------------------
 */
/**
 * Toggle error reporting.
 * 
 * @param integer $level Error level.
 * @param bool $display_errors Display errors if TRUE, hide them otherwise.
 * @return void
 */
function acivateErrorReporting($level = E_ALL, $display_errors = 1) {
    error_reporting($level);
    ini_set('display_errors', $display_errors);
}

打印.php

<?php
/**
 * Print data on screen.
 * 
 * @param mixed $data Data to print.
 * @param bool $preformatted Print preformatted if TRUE, print normal otherwise.
 * @return void
 */
function printData($data, $preformatted = FALSE) {
    if ($preformatted) {
        echo '<pre>' . print_r($data, true) . '</pre>';
    } else {
        echo $data;
    }
}

deli_list.php

<?php
require_once ('../mysql/config.php');
require_once ('../mysql/data_access.php');
require_once ('../mysql/print.php');
// Validate the 'id' value from the query string
if (!isset($_GET['id']) || empty($_GET['id']) || $_GET['id'] == 0) {
    echo 'Please provide a valid "id" value!';
} else {
    try {
        // Read the 'id' value from the query string.
        $id = $_GET['id'];
        // Create db connection.
        $connection = createConnection(
                MYSQL_HOST, MYSQL_DATENBANK, MYSQL_BENUTZER
                , MYSQL_KENNWORT, MYSQL_PORT, MYSQL_CHARSET
        );
        // Define sql statement.
        $sql = 'SELECT * FROM Tabelle1 WHERE id = :id';
        // Prepare and check sql statement (returns PDO statement).
        $statement = $connection->prepare($sql);
        if (!$statement) {
            throw new Exception('The SQL statement can not be prepared!');
        }
        // Bind values to sql statement parameters.
        $statement->bindValue(':id', $id, getInputParameterDataType($id));
        // Execute and check PDO statement.
        if (!$statement->execute()) {
            throw new Exception('The PDO statement can not be executed!');
        }
        // Fetch person details.
        $fetchedData = $statement->fetchAll(PDO::FETCH_ASSOC);
        closeConnection($connection);
    } catch (PDOException $pdoException) {
        printData($pdoException->getMessage());
        exit();
    } catch (Exception $exception) {
        printData($exception->getMessage());
        exit();
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>App title</title>
    </head>
    <body>
        <!-- Accordion example -->
        <ul class="accordion">
            <?php
            foreach ($fetchedData as $record) {
                ?>
                <li>
                    <?php echo $record['A'] ?> - <?php echo $record['B'] ?> - <?php echo $record['C'] ?>
                </li>
                <?php
            }
            ?>
        </ul>
        <!-- Table example -->
        <table>
            <?php
            foreach ($fetchedData as $record) {
                ?>
                <tr>
                    <td>
                        <?php echo $record['A'] ?>
                    </td>
                    <td>
                        <?php echo $record['B'] ?>
                    </td>
                    <td>
                        <?php echo $record['C'] ?>
                    </td>
                </tr>
                <?php
            }
            ?>
        </table>
    </body>
</html>

如果它确实必须按行号(可以根据 where 或顺序按子句而变化(,则可以使用 limit 子句:

SELECT * 
FROM Tabelle1
LIMIT 1000,1;

更好的设计是有一个唯一的键,并基于此选择一行:

SELECT * 
FROM Tabelle1
WHERE `id` = 1000;

由于您没有包含表的架构,因此我只是编造了一个列名作为示例。

要获取传递给 php 脚本的值,您可以使用:

$row_num = $_REQUEST['row'];

相关内容

  • 没有找到相关文章

最新更新