【问题标题】:SQL SELECT Query not working while working with PDO AJAX使用 PDO AJAX 时 SQL SELECT 查询不起作用
【发布时间】:2015-04-18 07:27:12
【问题描述】:

我有一个 SQL 查询,它在执行 web 托管 PhpMyadmin 时运行良好。 但是当我通过 php 代码使用它时,它不会返回任何数据。 等待任何帮助。

SQL 查询:

SELECT
`students`.`name`
, `students`.`fatherName`
, `students`.`motherName`
, `students`.`regNo`
, `course`.`courseName`
, `subject`.`subjectName`
, `subject`.`subjectID`
, `course`.`examRollNo`
, `year`.`yearName`
, `papers`.`paperCode`
FROM
`jnuskenresult`.`course`
INNER JOIN `result`.`students` 
    ON (`course`.`ID` = `students`.`ID`)
INNER JOIN `result`.`subject` 
    ON (`subject`.`courseID` = `course`.`courseID`)
INNER JOIN `result`.`year` 
    ON (`year`.`subjectID` = `subject`.`subjectID`)
INNER JOIN `result`.`papers` 
    ON (`papers`.`yearID` = `year`.`yearID`)
WHERE (`students`.`regNo` ='ABC-AA-12345'
AND `year`.`yearName` ='Third Year');

这是完美的工作 但是下面的 php PDP 代码不能在同一个数据库上运行。

    $data =urldecode(($_GET['appno']));
    //$dataSubject =htmlspecialchars(trim($_GET['subject']));
    $dataYear =htmlspecialchars($_GET['year']);


$sql="SELECT
    `students`.`name`
    , `students`.`fatherName`
    , `students`.`motherName`
    , `students`.`regNo`
    , `course`.`courseName`
    , `subject`.`subjectName`
    , `subject`.`subjectID`
    , `course`.`examRollNo`
    , `year`.`yearName`
    , `papers`.`paperCode`
    FROM
    `SOMEDBNAME`.`course`
    INNER JOIN `SOMEDBNAME`.`students` 
    ON (`course`.`ID` = `students`.`ID`)
    INNER JOIN `SOMEDBNAME`.`subject` 
    ON (`subject`.`courseID` = `course`.`courseID`)
    INNER JOIN `SOMEDBNAME`.`year` 
    ON (`year`.`subjectID` = `subject`.`subjectID`)
    INNER JOIN `SOMEDBNAME`.`papers` 
    ON (`papers`.`yearID` = `year`.`yearID`)
    WHERE (`students`.`regNo` =?
    AND `year`.`yearName` =?)";

    // we have to tell the PDO that we are going to send values to the query
    $stmt = $conn->prepare($sql);
    // Now we execute the query passing an array to execute();
    $results = $stmt->execute(array($data,$dataYear));
    //$results = $stmt->execute(array($data));
    // Extract the values from $result
    $rows = $stmt->fetchAll();
    $error = $stmt->errorInfo();
    //echo $error[2];

当我发送一个参数时,其他相同的代码正在工作。 我通过 ajax 调用作为 GET 方法发送两个参数。 感谢您的热心帮助。

【问题讨论】:

  • 您好,感谢您的快速回复。它显示“致命错误:调用未定义的方法 PDOStatement::query()”
  • 请显示$data$datayear的转储
  • 是否仍然出现致命错误?
  • 您确定要显示完整的代码片段吗?此片段中没有 query() 调用,但致命错误提示存在 query()

标签: php mysql ajax pdo mysqli


【解决方案1】:

尝试更改为:

   INNER JOIN `SOMEDBNAME`.`students` 
        ON `course`.`ID` = `students`.`ID`
        INNER JOIN `SOMEDBNAME`.`subject` 
        ON `subject`.`courseID` = `course`.`courseID`
        INNER JOIN `SOMEDBNAME`.`year` 
        ON `year`.`subjectID` = `subject`.`subjectID`
        INNER JOIN `SOMEDBNAME`.`papers` 
        ON `papers`.`yearID` = `year`.`yearID`
   WHERE `students`.`regNo` = :regno
        AND `year`.`yearName` = :yearname";

        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':regno',$data,PDO::PARAM_STR);
        $stmt->bindParam(':yearname',$dataYear,PDO::PARAM_STR);

        $results = $stmt->execute();

然后你可以简单地使用:

$data =$_GET['appno'];
$dataYear =$_GET['year'];

因此,为了确保问题只是您的变量值,请将您的代码更改为:

$stmt->bindParam(':regno','ABC-AA-12345',PDO::PARAM_STR);
$stmt->bindParam(':yearname','Third Year',PDO::PARAM_STR);

让我们看看结果...

【讨论】:

  • 不返回任何数据 - 这不是致命错误,正如我在 cmets 中询问的那样,向我们展示所有代码。顺便说一句,你可以检查你什么时候没有返回数据,尝试返回$data$datayear——问题是你的值在那里
  • 当我使用这个带有单个参数的查询时,它的工作但在使用 2 个参数时出现了问题。并且我检查了他们完美的参数值。所以我认为参数没有问题如果我错了请纠正我。
  • 是的,你错了 :-) 不,你是对的! :-) 这些话对您有帮助吗?我认为解决问题的唯一方法是继续尝试调试。在你的情况下,现在检查我答案底部的更新。
  • 实际上我从 2 天开始就在尝试这个。我现在正在控制 MAD。无论如何,我刚刚尝试了你给出的最后一个代码,它似乎返回了一些数据。但我无法使用 foreach 循环获取它。请把那部分发给我。
  • 所以,这个例子只是表明问题出在变量值上!!!对于某些值,它会带来空的结果。而且一般都可以。除非您确定您发送的值必须是 valic 并且不会带来空结果。在这种情况下,您只需要var_dump($data);var_dump($dataYear); 即可查看实际值(如果您愿意,可以向我展示这些转储,我们将继续合作)
【解决方案2】:

经过长时间的研究,我终于找到了解决这个问题的有效解决方案。

if (isset($_GET['appno'])) { 

$data =$_GET['appno']; 
$data = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data); 

$dataYear =$_GET['year']; 

$stmt = $conn->prepare("SELECT
`students`.`name`
, `students`.`fatherName`
, `students`.`motherName`
, `course`.`courseName`
, `subject`.`subjectName`
, `year`.`yearName`
, `students`.`applicationNo`
, `papers`.`paperCode`
FROM
`SOMEDBNAME`.`students`
INNER JOIN `SOMEDBNAME`.`course` 
    ON (`students`.`ID` = `course`.`ID`)
INNER JOIN `SOMEDBNAME`.`subject` 
    ON (`subject`.`courseID` = `course`.`courseID`)
INNER JOIN `SOMEDBNAME`.`year` 
    ON (`subject`.`subjectID` = `year`.`subjectID`)
INNER JOIN `SOMEDBNAME`.`papers` 
    ON (`year`.`yearID` = `papers`.`yearID`)
WHERE (`year`.`yearName` = '$dataYear'
AND `students`.`applicationNo` = '$data')");


$results = $stmt->execute(); 

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

PHP PDO 的内部连接问题遍布互联网。我希望这个解决方案能帮助其他人顺利完成工作。

我还要感谢@Kim 为解决这个问题付出了宝贵的时间。 无论如何快乐编码!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2014-07-09
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多