【发布时间】:2014-09-16 09:14:58
【问题描述】:
我在使用 PHP 运行 MySQL 函数时遇到了一些问题,实际上它是一系列“DROP FUNCTION IF EXISTS”和“CREATE FUNCTION”语句,然后是使用这些函数的查询。
整个事情都在裸 MySQL 中运行,我也使用“DELIMITER”语句(就像这样)。
在 PHP 中,我尝试运行整个事情,函数声明,然后作为一个大字符串一起查询,这让我明白我不需要“DELIMITER”语句,但是当 php 开始执行查询时,它仍然无法访问这些功能。
我也尝试过以同样的方式使用 'mysqli_multi_query()' 并在同一个链接上分别运行每个查询,但最后我得到了同样的错误。
我不会发布我的整个代码,我觉得我做的事情根本上是错误的,我的 drop / function 声明看起来像:
DROP FUNCTION IF EXISTS PQTY
CREATE FUNCTION PQTY (v_product_id INT,v_p_qty INT, v_option_id INT, v_option_value_id INT) RETURNS INT
NOT DETERMINISTIC
BEGIN
DECLARE qty INT;
SELECT products_stock_quantity INTO qty
FROM products_stock
WHERE products_stock_attributes = CONCAT(v_option_id,'-',v_option_value_id)
AND products_id = v_product_id;
IF ISNULL(qty) THEN
RETURN v_p_qty;
ELSE
RETURN qty;
END IF;
END
和主要查询:
SELECT PQTY(p.products_id,p.products_quantity, po.products_options_id, pov.products_options_values_id) AS 'qty'
FROM products p
LEFT JOIN products_description pd
ON p.products_id = pd.products_id
LEFT JOIN manufacturers m
ON m.manufacturers_id = p.manufacturers_id
LEFT JOIN products_attributes pa
ON p.products_id = pa.products_id
LEFT JOIN products_options po
ON po.products_options_id = pa.options_id
LEFT JOIN products_options_values pov
ON pov.products_options_values_id = pa.options_values_id
LEFT JOIN products_options_text pot
ON pot.products_options_text_id = po.products_options_id
就像我说的,在 PHP 中,我尝试单独运行每个语句,但在同一个链接上,也作为一个大字符串运行,到目前为止,我已经尝试使用旧的 mysql 函数和 mysqli 函数(程序函数) .
任何帮助将不胜感激。
【问题讨论】:
-
您在 SQL 语句之间使用分号作为分隔符吗?
-
当我一起尝试这些语句时,我尝试了有和没有,两种方式都出错了。所以错误看起来像
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP FUNCTION IF EXISTS PMODEL;CREATE FUNCTION PMODEL (v_model VARCHAR(35), opt' at line 20和You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP FUNCTION IF EXISTS PMODELCREATE FUNCTION PMODEL (v_model VARCHAR(35), opti' at line 20没有 -
所有语句都与 mysqli_query 作为单个语句一起使用吗?
-
我只从主查询中得到一个错误,所以我猜他们会......
-
什么错误?为什么省略了分隔 SQL 和过程部分的 DELMITER 语句? DROP FUNCTION 语句是否即使在 'mysqli_multi_query() 出现错误时也能正常工作?