【问题标题】:Pass on variable sql queries in php在 php 中传递变量 sql 查询
【发布时间】:2014-04-24 09:11:32
【问题描述】:

这个查询在进入 phpMyAdmin 时有效,但是我无法让它在 PHP 中工作:

SET @cnt = 0; UPDATE groupsnumber SET ordering = @cnt := (@cnt+1) ORDER BY name

这是我尝试过的代码:

 $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

 $resSrt =$mysqli->query("SET @cnt = 0; 
                         UPDATE groupsnumber 
                         SET ordering = @cnt := (@cnt+1) ORDER BY name"); 

 if (!$resSrt) 
 {
     echo "Error executing query: (" . $mysqli->errno . ") " . $mysqli->error; 
 }

这是错误信息:

执行查询时出错:(1064) 您的 SQL 语法有误; 检查与您的 MySQL 服务器版本相对应的手册 在 'UPDATE groupsnumber SET ordering = @cnt := 附近使用正确的语法 (@cnt+1) 第 1 行按名称排序

任何想法如何解决这个问题?

【问题讨论】:

    标签: php mysql sql mysqli


    【解决方案1】:

    原因很简单:

    在

    SET @cnt = 0; UPDATE groupsnumber SET ordering = @cnt:= (@cnt+1) ORDER BY name"
    

    您正尝试通过单个 $mysqli->query 函数执行 2 个查询。

    • SET 作为第一个查询
    • Update 作为第二个查询

    mysqli_ 不允许通过其单个 $mysqli-> 查询运行多个查询,这就是为什么它安全且首选作为防止 sql_injections 的选项的原因。

    将它们分开是 2 个单独的查询,您就可以开始了! :)

    【讨论】:

    • 如果我将第二个查询分成两个单独的查询,我认为第二个查询不会知道第一个设置的@cnt 值。但它似乎工作。谢谢!!!
    猜你喜欢
    • 2019-02-16
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多