我正在试验存储过程以返回递归父列表。
但是,在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
答案 0 :(得分:4)
适用于
SELECT
,SHOW
,DESCRIBE
,EXPLAIN
和其他声明 返回resultset
,mysql_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))