繁体   English   中英

从数据库中获取所有与PHP查询匹配的条目

[英]Get all entries from a database matching a query with PHP

好的,所以我要建立一个简单的博客系统。 下面是它的工作原理:

撰写文章

1.当用户想要写帖子时,他们访问页面。 2.当他们单击提交时,它将使用其用户名将其添加到数据库中(从具有$_SESSION['username'] cookie中获取)


阅读帖子

  1. 用户导航到以下页面:veiw.php?username = whatever
  2. 该脚本连接数据库并获取与whatever匹配的所有帖子
  3. 获取时间戳和帖子,并在每个帖子之间显示&nbsp。 例如;

2018年1月2日:

blablablablablablablablablablablablablablablablabla


2018年4月6日bdcpprbirv2brviov2ugtiog2rfip2rgui23rgu3riph2eirvph2v


对于如何处理提交页面,我有一个比较好的主意,但是在查看页面时遇到了麻烦。 这是我的尝试(包括config.php)

Veiw.php

 <?php require('includes/config.php'); //SELECT * FROM blogs WHERE username LIKE '$query' $username = intval($_GET['username']); $results = mysql_query("SELECT * FROM blogs WHERE username=$username"); while ($row = mysql_fetch_array($results)) { $date = $row['date']; echo $date; //Outputs: 2 $post = $row['post']; echo $post; //Outputs: 2 } ?> 

Config.php

 <?php ob_start(); session_start(); //set timezone date_default_timezone_set('America/New-York'); //database credentials define('DBHOST','REDACTED'); define('DBUSER','REDACTED'); define('DBPASS','REDACTED'); define('DBNAME','REDACTED'); //application address define('DIR','http://REDACTED/'); define('SITEEMAIL','REDACTED'); try { //create PDO connection $db = new PDO("mysql:host=".DBHOST.";charset=utf8mb4;dbname=".DBNAME, DBUSER, DBPASS); //$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);//Suggested to uncomment on production websites $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Suggested to comment on production websites $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch(PDOException $e) { //show error echo '<p class="bg-danger">'.$e->getMessage().'</p>'; exit; } //include the user class, pass in the database connection include('classes/user.php'); include('classes/phpmailer/mail.php'); $user = new User($db); ?> 

我知道config.php可以工作,但是可以通过URL中的用户(例如https://www.code-u.org/thecollective/veiw.php?username=REDACTED)对其进行测试

$username = intval($_GET['username']);
$results = $db->prepare("SELECT * FROM `blogs` WHERE `username` = '"$username"'");
$results->bindValue('username', intval($_GET['username']), PDO::PARAM_INT);
$results->execute();

while ($row = $results->fetch()) {
    echo  nl2br ("\n");
    $date = $row['date'];
    echo $date;
    echo  nl2br ("\n");
    $post = $row['post'];
    echo $post;
    echo nl2br ("\n ________________________________________________________________________");
}

更新的查询:

 $username = intval($_GET['username']); $results = $db->prepare("SELECT * FROM `blogs` WHERE `username` = '"$username"'"); $results->bindValue('username', intval($_GET['username']), PDO::PARAM_INT); $results->execute(); while ($row = $results->fetch()) { echo nl2br ("\\n"); $date = $row['date']; echo $date; echo nl2br ("\\n"); $post = $row['post']; echo $post; echo nl2br ("\\n ________________________________________________________________________"); } 

它返回页面,但没有结果。

config.php ,使用PDO建立数据库连接,然后在view.php ,使用简单的mysql_query进行查询(无法访问您提供给PDO对象的数据库详细信息)。

(附带说明:不建议使用mysql_query在PHP 7中已删除-因此,如果现在正在学习PHP,则无论如何都不要使用它。)

使用您创建的PDO对象,查询如下所示:

$results = $db->prepare('
    SELECT *
    FROM blogs
    WHERE username = :username
');
$results->bindValue('username', intval($_GET['username']), PDO::PARAM_INT);
$results->execute();

while ($row = $results->fetch()) {
    $date = $row['date'];
    echo $date;
    $post = $row['post'];
    echo $post;
}

在mysql_ *查询上使用PDO是有好处的,因为(其中一个)它们支持准备好的语句(如上用bindValue函数演示的那样),这意味着即使使用直接用户输入,您的查询也将受到保护,免受SQL注入 (就像您在此处所做的那样) )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM