我的MySQL命令有问题:
<?php
if( !empty($_POST['url']) )
exec('/bin/bash /home/d_youtube/youtube.sh "' . $_POST['url'] . '"');
?>
当我尝试在VB.NET(VS2008)中运行时,我收到以下错误:
必须定义
cmdTemp = New MySqlCommand("SET @qty = " & Qty & "; update(tb_harvest) set actual = (case when @qty >= actual " & _ "then if(@qty := @qty - actual, 0, 0) when (@tmp := actual - @qty) " & _ "then if(@qty := 0, @tmp, @tmp) " & _ "else actual end), Status = (case when @qty >= actual then if(@qty := @qty - actual, 0, 0) " & _ "when (@tmp := actual - @qty) then if(@qty := 0, 1, 1) else 1 end) order by harvestid;", cn)
,以便@Qty
然而,当我在MySQL(HeidiSQL)上运行它时,它没有问题。
当我添加到@tmp
,New ConnectionString
时,错误是:
不支持关键字。参数名称:allowuservariables
这是我使用Connection Strings汇总的Allow User Variables = true
:
ConnectionString
我正在使用MySQL版本5.6.21
答案 0 :(得分:2)
Connection Strings确实指定这是一个有效的连接:
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;AllowUserVariables=True;
注意AllowUserVariables
。这是您在连接字符串中设置的方式。然而,这似乎会让你感到悲伤,虽然我无法理解为什么这也是documentation中所说的。也许是特定版本。
但请尝试将其更改为:
;Allow User Variables=True
这就是它在你的连接字符串中的样子:
Server=localhost;Port=3306;Database=testing;Uid='test';Pwd='test';Allow User Variables=True;
我做了一些环顾四周,发现了一些其他来源也将其设置为;Allow User Variables=True
。
$connectionstring = "Server=$Server;Port=$port;Database=$DataBase;Uid=$User;Pwd=$Password;allow zero datetime=yes;Allow User Variables=True"
我发现这个blog,告诉我们,对于更新版本的.net连接器,你必须添加
;Allow User Variables=True
它是一个连接字符串选项 - &#34;允许用户变量= true&#34;
设置为true时,参数的前缀为&#39;?&#39;。
OP有confirmed,他们不必使用?
。他们继续在查询中使用@
。
答案 1 :(得分:0)
我不清楚你要做什么。您似乎可以简化查询,因为if
函数总是返回相同的值,无论它们是否为true或false。我对MySql不太熟悉,所以我可能误解了你想要完成的事情。
update(tb_harvest)
set actual = if(@qty >= actual, 0, actual - @qty),
Status = if(@qty >= actual, 0, 1)
order by harvestid;
然后只需传入@qty
作为参数。