PHP mysql_query为SELECT返回TRUE

时间:2015-05-04 05:49:46

标签: php mysql

我正在试验存储过程以返回递归父列表。 但是,在PhpMyAdmin中,mysql_query只返回一个布尔值,而不是返回一个结果。

mysql_query("DROP FUNCTION IF EXISTS `GetAncestry`") or die(mysql_error());

$sql = "[CREATE SQL FUNCTION THAT LOOPS TO RETURN A STRING CONTAINING A COMMA DELIMITED STRING OF ID's]";

mysql_query($sql) or die(mysql_error());

$sql = "SELECT SubProcessID,GetAncestry(SubProcessID) as parents from prodsubprocess where SubProcessID = {$processID}";

mysql_query($sql) //<--- Returns TRUE, but in PhpMyAdmin returns 7,6,8

4 个答案:

答案 0 :(得分:4)

来自documentation:

  

适用于SELECTSHOWDESCRIBEEXPLAIN和其他声明   返回resultsetmysql_query()会在成功时返回资源,   错误时为FALSE。

您需要将mysql_fetch_assoc用作

目的
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
   //fetch result
}
  

注意: mysql_*已被删除;请为数据库查询使用PDO()预准备语句

答案 1 :(得分:2)

正如您在documentation

中看到的那样
  

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,   mysql_query()成功时返回TRUE,错误时返回FALSE。

     

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

您必须加mysql_fetch_assoc来获取值。

停止使用deprcated mysql_ * API。将mysqli_或PDO与准备好的陈述一起使用

答案 2 :(得分:1)

首先要注意的是:不要再使用mysql_了,转到mysqli _。

您还想使用预准备语句。

在phpmyadmin上,它只是自动返回所有结果,就像它编码的方式一样。如果您只是执行查询,那么它告诉您的是它是否已成功执行,在这种情况下,因为它是TRUE,然后它正在运行。

在这种情况下你想要做的是:

$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)){
    print_r($row);
}

但严重的是,查看准备好的陈述。在php.net上有很多关于它的信息,只需看看这里:http://php.net/manual/en/mysqli.prepare.php

“示例”区域为您提供了大量基本信息。

答案 3 :(得分:0)

在Phpmyadmin中,您将自动获得该存储过程的结果。但是在php级别,它会给你结果状态为TRUE或FALSE。如果要在PHP级别查看结果,则必须使用loping构造循环返回的DB资源以获取每个值。

以下是通过循环获取数据的代码。

#this gives significance levels also
library(Hmisc)
rcorr(df, type="pearson") # type can be pearson or spearman

#or as matrix
rcorr(as.matrix(df))