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

标签 php mysql pdo sql-like

我正在尝试使用 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/

相关文章:

php - UTF-8贯穿始终

php - 在 Amazon EC2 上安装 php-dom 扩展

php - 在 MySQL 中搜索字符串 WHERE string LIKE string(括在括号中)

php - 如何使用Unity处理php session ?

php pdo切换主键值

javascript - 通过ajax和jquery从另一个php文件上传后显示图像

php - 为什么 ng-repeat 在自动递增 id 时表现得很奇怪?

php - 保存 PHP 之前图像的唯一名称

c++ - VS2010 带有 extern 关键字

Mysql查询: between a number range when numbers have hyphens