MySQL dynamic link to fetch the right row

前端 未结 2 1031
别跟我提以往
别跟我提以往 2021-01-23 23:03

I have a MySQL-database with x rows. Now I want to interpret a link, fetch the right row and print this values.

E.g. Link: .html?row=3 -> Opens site which fetch row 3

相关标签:
2条回答
  • 2021-01-23 23:29

    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);
    }
    

    print.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>
    
    0 讨论(0)
  • 2021-01-23 23:46

    If it really has to be by row number (which can change depending upon the where or order by clauses), you can use the limit clause:

    SELECT * 
    FROM Tabelle1
    LIMIT 1000,1;
    

    A much better design is to have a unique key, and select a row based on that:

    SELECT * 
    FROM Tabelle1
    WHERE `id` = 1000;
    

    Since you didn't include the schema of the table, I just made up a column name as an example.

    To get the value passed to your php script, you can use:

    $row_num = $_REQUEST['row'];
    
    0 讨论(0)
提交回复
热议问题