MySQLでデータ更新が失敗


PHPを使ってMySQLでデータ更新する時に、下記の【成功】と同じ事を【失敗】で行うとこのSQL文の文法にエラーが発生します。【失敗】はforeachで配列のデータを使っています。間違っている部分を指摘してください。

【成功】
$sql = 'UPDATE data SET url = "http://www.hoge.com/aaa" WHERE id = 123';

【失敗】
$sql = 'UPDATE data SET url = $value['url'] WHERE id = $value['id']';

Linux、Windows
PHP 5.2.5
MySQL 5.1.22-rc

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/08/30 23:10:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kunyami No.3

回答回数24ベストアンサー獲得回数4

ポイント40pt

http://www.php.net

$sql = "UPDATE data SET url = 'http://www.hoge.com/{$value['param1']}/bbb/{$value['param2']}' WHERE id = $value['id']";

◆SQLでは文字列リテラルは「'(シングルコーテーション)」で囲む。

◆PHPで文字列内に変数名を利用したい場合は、「"(ダブルコーテーション)」で文字列を囲むこと。

◆PHPで文字列内の変数部分を「{(波括弧)」で囲むことで、ここが変数であることを明示する。

PHPで文字列内に変数を書き込むことで、理解しづらくなってしまうのであれば、以下のようにすれば理解しやすいのではないでしょうか?

$sql = "UPDATE data SET url = 'http://www.hoge.com/" . $value['param1'] . "/bbb/" . $value['param2'] . "' WHERE id = $value['id']";

id:metazy

解決しました。ありがとうございました。

2008/08/30 23:07:04

その他の回答2件)

id:kunyami No.1

回答回数24ベストアンサー獲得回数4

ポイント20pt

http://www.php.net

$sql = "UPDATE data SET url = '{$value['url']}' WHERE id = {$value['id']}";

id:metazy

申し訳ありませんが【成功】と【失敗】の例が間違っていました。下記でもう一度ご指摘いただけないでしょうか。よろしくお願いします。

【成功】

$sql = 'UPDATE data SET url = "http://www.hoge.com/aaa/bbb/ccc" WHERE id = 123';

【失敗】

$sql = 'UPDATE data SET url = http://www.hoge.com/$value['param1']/bbb/$value['param2'] WHERE id = $value['id']';

2008/08/24 16:00:08
id:Leclerc No.2

回答回数86ベストアンサー獲得回数6

ポイント20pt

$sql = "UPDATE data SET url = \"$value['url']\" WHERE id = $value['id']";

http://www.php.net/manual/ja/language.types.string.php

id:metazy

申し訳ありませんが【成功】と【失敗】の例が間違っていました。下記でもう一度ご指摘いただけないでしょうか。よろしくお願いします。

【成功】

$sql = 'UPDATE data SET url = "http://www.hoge.com/aaa/bbb/ccc" WHERE id = 123';

【失敗】

$sql = 'UPDATE data SET url = http://www.hoge.com/$value['param1']/bbb/$value['param2'] WHERE id = $value['id']';

2008/08/24 16:00:27
id:kunyami No.3

回答回数24ベストアンサー獲得回数4ここでベストアンサー

ポイント40pt

http://www.php.net

$sql = "UPDATE data SET url = 'http://www.hoge.com/{$value['param1']}/bbb/{$value['param2']}' WHERE id = $value['id']";

◆SQLでは文字列リテラルは「'(シングルコーテーション)」で囲む。

◆PHPで文字列内に変数名を利用したい場合は、「"(ダブルコーテーション)」で文字列を囲むこと。

◆PHPで文字列内の変数部分を「{(波括弧)」で囲むことで、ここが変数であることを明示する。

PHPで文字列内に変数を書き込むことで、理解しづらくなってしまうのであれば、以下のようにすれば理解しやすいのではないでしょうか?

$sql = "UPDATE data SET url = 'http://www.hoge.com/" . $value['param1'] . "/bbb/" . $value['param2'] . "' WHERE id = $value['id']";

id:metazy

解決しました。ありがとうございました。

2008/08/30 23:07:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません