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
<?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;
}
<?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
/**
* 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;
}
}
<?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>
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'];