查询适用于mysql但不适用于php sql调用

时间:2016-09-02 15:32:42

标签: php mysql stored-procedures

我有一个存储在数据库中的产品表,其中包含与产品相关的信息。我有一个存储过程,可以获取最大数量的行。

每当我尝试从php调用该存储过程时它返回false,而当我在mysql控制台中运行相同的查询时,它会返回行。

PHP代码:

$resVal=$mysqli->query('CALL get_max_quant_rows("'.$company.'","'.$type.'","'.$limit.'")');
$countVal=$resVal->fetch_row();
$countVal=$countVal[0];
$results = $mysqli->query('CALL get_max_quant_rows("'.$company.'","'.$type.'","'.$limit.'")');
var_dump('CALL get_max_quant_rows("'.$company.'","'.$type.'","'.$limit.'")');
var_dump($results);

上述查询的var_dump的输出给了我:

string(72) "CALL  get_max_quant_rows("1471941595186287666657bc0bdb1c25d","Cakes","1")" bool(false)

我已经向您展示了查询的var_dump,以向您显示这些值在存储过程中完美无缺。

SQL console

当我在控制台内运行相同的查询时,它运行了,它给了我结果。这可能是什么原因导致这种行为?

存储过程:

DELIMITER $$

USE `dboxyz`$$

DROP PROCEDURE IF EXISTS `get_max_quant_rows`$$

CREATE  PROCEDURE `get_max_quant_rows`(company VARCHAR(8000),product_type VARCHAR(8000),limiter INT)
BEGIN
DECLARE emptyCheckFirst BIT;
DECLARE emptyCheckSecond BIT;
SET emptyCheckFirst=`dboxyz`.isNullOrEmpty(company);
SET emptyCheckSecond=`dboxyz`.isNullOrEmpty(product_type);
IF (emptyCheckFirst=0 AND emptyCheckSecond=0)
THEN 
  SELECT p1.id,p1.price,p1.product_code,p1.product_name,p1.quantity,p1.amount,p1.companyId FROM products p1 
INNER JOIN (SELECT product_code,MAX(quantity) max_quantity FROM products WHERE companyId=company AND `type`=product_type
GROUP BY product_code) p2 ON p1.product_code=p2.product_code AND p1.quantity=p2.max_quantity LIMIT limiter;
END IF;
IF emptyCheckFirst=1 AND emptyCheckSecond=1 
THEN
   SELECT p1.id,p1.price,p1.product_code,p1.product_name,p1.quantity,p1.amount,p1.companyId FROM products p1 
INNER JOIN (SELECT product_code,MAX(quantity) max_quantity FROM products  
GROUP BY product_code) p2 ON p1.product_code=p2.product_code AND p1.quantity=p2.max_quantity LIMIT limiter;
END IF;
    END$$

DELIMITER ;

更新: DB提供的错误

  

命令不同步;你现在不能运行这个命令

DELIMITER $$

USE `dboxyz`$$

DROP FUNCTION IF EXISTS `isNullOrEmpty`$$

CREATE  FUNCTION `isNullOrEmpty`(xx VARCHAR(8000)) RETURNS BIT(1)
BEGIN
     DECLARE somevariable VARCHAR(8000);
    SET somevariable=xx;
    IF (somevariable IS NOT NULL AND LEN(somevariable)>0)
    THEN
    RETURN 0;
    ELSE
    RETURN 1;
    END IF;
    END$$

DELIMITER ;

1 个答案:

答案 0 :(得分:1)

MySQL存储过程可以返回多个结果集,这是在使用相同连接执行另一个查询之前清除所有结果的原因。

只需使用; Test if the window exists and display the results. If WinExists($axTitle, "") Then ; add here: check if the window is active - activate if not If Not WinActive($axTitle) Then WinActivate($axTitle) Else Run($exePath) WinWait($axTitle, "", 20) EndIf ,然后再进行一次查询:

next_result