Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图在sql查询中获取非对象的属性_Php_Mysql - Fatal编程技术网

Php 试图在sql查询中获取非对象的属性

Php 试图在sql查询中获取非对象的属性,php,mysql,Php,Mysql,我有以下SQL查询: SET @rank=0; SELECT receivedData.* FROM (SELECT @rank:=@rank+1 AS rank, ID FROM data ORDER BY Eindtijd ASC) AS receivedData ORDER BY ID DESC LIMIT 1; 当我在服务器上的phpmyadmin上运行此操作时,一切正常 但是,当我使用php运行它时,会出现以下错误: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了

我有以下SQL查询:

SET @rank=0; SELECT receivedData.* FROM (SELECT @rank:=@rank+1 AS rank, ID FROM data ORDER BY Eindtijd ASC) AS receivedData ORDER BY ID DESC LIMIT 1;
当我在服务器上的phpmyadmin上运行此操作时,一切正常

但是,当我使用php运行它时,会出现以下错误:

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在第1行的“SELECT receivedData.*FROM SELECT@rank:=@rank+1 AS rank,ID FROM data ORDER BY”附近使用的正确语法


我真的不明白为什么它不能在php中工作,正如Patrick建议的那样,您可以尝试:

$sSQL = "SET @rank=0;";

if($conn->query($sSQL)){
    $sSQL = "SELECT receivedData.* FROM (SELECT @rank:=@rank+1 AS rank, ID FROM data ORDER BY Eindtijd ASC) AS receivedData ORDER BY ID DESC LIMIT 1;";
    $conn->query($sSQL);
}
$conn->query一次只执行一个命令。从手册: 查询在单个函数调用中执行SQL语句,如果有结果集,则返回该语句作为PDOStatement对象返回的结果集


因为您正在重新使用连接,所以查询应该仍然可以访问本地变量。

正如Patrick建议的那样,您可以尝试:

$sSQL = "SET @rank=0;";

if($conn->query($sSQL)){
    $sSQL = "SELECT receivedData.* FROM (SELECT @rank:=@rank+1 AS rank, ID FROM data ORDER BY Eindtijd ASC) AS receivedData ORDER BY ID DESC LIMIT 1;";
    $conn->query($sSQL);
}
$conn->query一次只执行一个命令。从手册: 查询在单个函数调用中执行SQL语句,如果有结果集,则返回该语句作为PDOStatement对象返回的结果集


因为您正在重用连接,所以查询应该仍然可以访问本地变量。

您可以组合这两个查询

SET @rank=0;
SELECT
  receivedData.*
FROM (
  SELECT
     @rank := @rank + 1 AS rank
    , ID
  FROM
   data
  ORDER BY
   Eindtijd ASC
 )
   AS receivedData
 ORDER BY ID DESC LIMIT 1;
进入


您可以组合这两个查询

SET @rank=0;
SELECT
  receivedData.*
FROM (
  SELECT
     @rank := @rank + 1 AS rank
    , ID
  FROM
   data
  ORDER BY
   Eindtijd ASC
 )
   AS receivedData
 ORDER BY ID DESC LIMIT 1;
进入

使用PDO,您可以执行以下操作:

$db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'password');

$statement = $db->prepare('SET @rank = "1";  SELECT receivedData.* FROM (SELECT @rank:=@rank+1 AS rank, ID FROM data ORDER BY Eindtijd ASC) AS receivedData ORDER BY ID DESC LIMIT 1;');

$statement->execute();

do {
    $data = $statement->fetchAll(\PDO::FETCH_ASSOC);
    var_dump($data);

} while ($statement->nextRowset());
第一个返回的数组将为空,因为第一个查询没有返回任何内容。第二个返回的数组将保存您的数据。

使用PDO,您可以执行以下操作:

$db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'password');

$statement = $db->prepare('SET @rank = "1";  SELECT receivedData.* FROM (SELECT @rank:=@rank+1 AS rank, ID FROM data ORDER BY Eindtijd ASC) AS receivedData ORDER BY ID DESC LIMIT 1;');

$statement->execute();

do {
    $data = $statement->fetchAll(\PDO::FETCH_ASSOC);
    var_dump($data);

} while ($statement->nextRowset());

第一个返回的数组将为空,因为第一个查询没有返回任何内容。第二个返回的数组将保存您的数据。

您必须在两个不同的命令中执行这些命令。请尝试在表周围使用倒勾“`”,在值周围使用列名和引号。数据库可能不知道哪个是哪个。@PatrickQ该如何工作?尝试单独执行查询。@PatrickQ是正确的,这是设置秩变量的第一个查询,第二种方法是执行真正的SQL,您必须在两个不同的命令中执行这些命令。请尝试在表周围使用反勾号``并在值周围使用列名和引号。可能数据库不知道哪个是哪个。@PatrickQ如何工作?请尝试单独执行查询。@PatrickQ是对的,第一个查询用于设置秩变量,第二个查询用于执行真正的SQLSQL感谢您的解释!欢迎您,如果这解决了您的问题,请将其标记为已接受的答案。哇,对不起..谢谢您的解释!欢迎您,如果这解决了您的问题,请标记为已接受的答案。哎呀,对不起。。