【问题标题】:Using MySQL functions in PHP在 PHP 中使用 MySQL 函数
【发布时间】: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 20You 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() 出现错误时也能正常工作?

标签: php mysql sql


【解决方案1】:

您不能将常规查询与mysqli_multi_query 中的create function 语句混合使用,因为它们都需要自己的(分号)分隔符,并且您不能在此处重新定义分隔符。所以你必须把语句分开。

【讨论】:

  • 非常感谢您的帮助,最后我没有重新定义分隔符,而是将每个单独的查询拆分并在同一个连接上分别运行(这次使用 oo mysqli 接口)与最后一个是提供结果的查询。您花了很多时间帮助我,再次感谢您!
猜你喜欢
  • 2021-11-06
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 2011-06-15
  • 2019-10-08
相关资源
最近更新 更多