gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:49:47 25 4
gpt4 key购买 nike

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

撰写帖子

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

<小时/>

阅读帖子

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

2018 年 1 月 2 日:

布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉<小时/>

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
}
?>

配置.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返回

Warning: mysql_query(): No such file or directory in REDACTED/veiw.php on line 5

Warning: mysql_query(): A link to the server could not be established in REDACTED/veiw.php on line 5

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in REDACTED/veiw.php on line 6
<小时/>

更新的查询:

$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 injection 的影响。即使使用直接用户输入(正如您可能在这里所做的那样)。

关于php - 使用 PHP 从数据库中获取与查询匹配的所有条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49481075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com