私は、製品に関連する情報を含むデータベース内に格納された製品テーブルを持っています。最大量の行を取得するストアドプロシージャがあります。クエリはmysqlで動作しますが、php sqlの呼び出しでは機能しません
私はそのストアドプロシージャをPHPから呼び出すときはいつでも、私は同じクエリをmysqlコンソールで実行している間、それは私に行を返す間falseを返します。
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の出力に含まは私を与える:私はあなたのクエリののvar_dumpを示している
string(72) "CALL get_max_quant_rows("1471941595186287666657bc0bdb1c25d","Cakes","1")" bool(false)
値であることを示すこととして、ストアドプロシージャ内を完全に移動します。
私は、コンソール内の同じクエリを実行したとき、それが走り、それが私に与えたこの動作の考えられる理由を、PEができresults.What?
ストアドプロシージャ:
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 ;
を、その後、クエリが失敗しました。 DBが** WHY **失敗したことを教えてもらう: 'if($ result === false){die(mysqli_error($ mysqli)); } ' –
これをmysqlでタグ付けしたので、' dbo'ビジネスは何ですか?これはMSSQLであり、mysqlにはisnullorempty関数がありません。 –
@MarcBは私の質問を更新しました。 –