gpt4 book ai didi

php - 在非对象上调用成员函数 fetch()

转载 作者:行者123 更新时间:2023-11-29 04:40:31 24 4
gpt4 key购买 nike

我正在尝试使用 pdo 在 php 中进行选择。
它可以处理很多请求,但当我使用类似的请求时却不行,例如:

查询:

SELECT * FROM projets WHERE `identifiantProjetRattachement` LIKE "%PC13287%" ORDER BY "identifiantProjetDSR"

这是我的 php 代码:

<?php
function requette($requette,$table)
{
$bdd = new PDO('mysql:host=localhost;dbname=spb', 'root', '');
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='$table';";
$req = $bdd->query($sql);

$titres = array();

while($resultat = $req->fetch())
{
array_push($titres,$resultat['COLUMN_NAME']);
}

// ON A LES TITRES DONC ON PASSE AU CONTENU
$sql = $requette;
$req = $bdd->query($sql);

$retour = "";
$cpt = 0;
$nbLigne = 0;

while($resultat = $req->fetch())
{
$nbLigne++;
$retour .= "<tr><td class='boutonTouteLaCase' onclick='surlignerLigneProjets(this);'></td><td>$nbLigne</td>";
for($cpt=0;$cpt<count($titres);$cpt++)
{
if($titres[$cpt] != "id")
$retour .= "<td>".utf8_encode($resultat[$titres[$cpt]])."</td>";
}

$retour .= "</tr>";
}
echo $retour;
}

$requette = htmlentities($_POST['requette']);
$table = htmlentities($_POST['table']);

echo $requette."<br/>";
echo $table."<br/>";

echo requette($requette,$table);?>

你认为这是口音问题吗?还是由于 '?
PS:此请求适用于 phpmyadmin。
谢谢大家。

最佳答案

问题是您正在使自己的查询无效:

...

$requette = htmlentities($_POST['requette']);
$table = htmlentities($_POST['table']);

echo $requette."<br/>";
echo $table."<br/>";

echo requette($requette,$table);

请注意,您正在使用 htmlentities($requette),稍后您尝试运行该确切查询:

$sql =  $requette;
$req = $bdd->query($sql);

该查询将如下所示:

SELECT * FROM projets WHERE identifiantProjetRattachement
LIKE &quot;%PC13287%&quot; ORDER BY &quot;identifiantProjetDSR&quot;

对于您提到的示例。无效查询。

因此,当您将变量输出到屏幕时,您应该只使用 htmlentities(),但您不应该更改变量本身:

// Don't do this:
// $requette = htmlentities($_POST['requette']);
// $table = htmlentities($_POST['table']);

// just do this:
echo htmlentities($requette)."<br/>";
echo htmlentities($table)."<br/>";

echo requette($requette,$table);

除此之外,我假设您只能自己访问它,因为您直接运行用户提供的 sql 查询,所以如果未经授权的用户可以访问它,那将是非常危险的。

关于php - 在非对象上调用成员函数 fetch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30048747/

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