0

これらの質問の1つを尋ねて申し訳ありませんが、私は過去1時間、これを理解しようとしてきました。

同時にたくさんの列を更新しようとしています。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));

そしてそれは魅力のように機能します!では、BigQueryの何が問題になっていますか?ありがとう!

4

1 に答える 1

2

このページには、MySQLの識別子に使用できる文字がリストされていますが、-(マイナス)はその1つではないようです。

まず、それborder-radiusが正しい列名であると確信していますか?マイナス記号を使用しますが、他のすべての記号はアンダースコアを使用します_。最低限、命名の一貫性を維持する必要があります。

それ以外の場合は、更新ステートメントが機能するまで、一度に1列ずつ削除を開始します。特定の列に問題がある場合(またはコマンドの長さの可能性は低いですが)、この種の「1つ変更して再試行する」戦略で問題を特定できます。

于 2012-10-06T01:46:16.693 に答える