0

很抱歉问这些问题之一,但过去一个小时我一直在努力解决这个问题,但我只是被卡住了。

我正在尝试同时更新很多列。我正在使用 PDO。

一些PHP代码:

$db=db_connect();
$wid=$_POST['wid'];
$time=time();
$username=$_SESSION['s_username'];
$arr=explode("|", $_POST['idata']);
array_push($arr, $time,$username,$wid );

$statement = $db->prepare("UPDATE widgets SET file_id=?,delay=?,title=?,instructions=?,width=?,height=?,bg_color=?,bg_image=?,border-radius=?,offer_table_border_width=?,offer_table_border_color=?,offer_table_link_color=?,offer_table_link_hover_color=?,offer_table_bg1=?,offer_table_bg2=?,head_font_size=?,head_font_color=?,instructions_font_size=?,instructions_font_color=?,time=? WHERE username=? AND wid=?");
$statement->execute($arr);

var_dump($arr);

该代码来自格式为“var1|var2|var3...”等的 AJAX 请求。此信息由“|”分隔 分隔符,然后添加一些变量,然后应该更新表。

这是 var_dump 的结果(这就是 $arr 的含义):

array(22) { [0]=> string(2) "40" [1]=> string(1) "0" [2]=> string(9) "My Title!" [3]=> string(16) "My Instructions!" [4]=> string(3) "700" [5]=> string(3) "500" [6]=> string(4) "#FFF" [7]=> string(27) "http://background-image.png" [8]=> string(1) "0" [9]=> string(1) "1" [10]=> string(7) "#81ABD6" [11]=> string(7) "#0588C6" [12]=> string(7) "#81ABD6" [13]=> string(4) "#FFF" [14]=> string(7) "#DDEEFF" [15]=> string(2) "24" [16]=> string(7) "#2779AA" [17]=> string(2) "18" [18]=> string(7) "#2779AA" [19]=> int(1349486490) [20]=> string(15) "myuser" [21]=> string(6) "2LvS4c" }

再一次,PDO 声明:

$statement = $db->prepare("UPDATE widgets SET file_id=?,delay=?,title=?,instructions=?,width=?,height=?,bg_color=?,bg_image=?,border-radius=?,offer_table_border_width=?,offer_table_border_color=?,offer_table_link_color=?,offer_table_link_hover_color=?,offer_table_bg1=?,offer_table_bg2=?,head_font_size=?,head_font_color=?,instructions_font_size=?,instructions_font_color=?,time=? WHERE username=? AND wid=?");

结果:errorInfo() 没有返回任何错误。有一行 username="myuser" 和 wid="2LvS4c",但它根本没有更新。一定有某种我看不到的语法错误,并且没有通过 errorInfo() 返回。

我尝试了一个更简单的查询:

$statement = $db->prepare("UPDATE widgets SET file_id=? WHERE username=? AND wid=?");
$statement->execute(array($arr[0], $username, $wid));

它就像一个魅力!那么大查询有什么问题呢?谢谢!

4

1 回答 1

2

此页面列出了 MySQL 标识符中允许的字符,并且-(减号)似乎不是其中之一。

首先,您确定这border-radius是正确的列名吗?它使用减号,而其他所有使用下划线,_. 至少,您应该保持命名的一致性。

除此之外,开始从更新语句中一次删除一列,直到它起作用。如果这是特定列的问题(或者可能是命令长度,但不太可能),这种“改变一件事并重试”策略可以查明问题。

于 2012-10-06T01:46:16.693 回答