我有一个包含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'];