0

現在、MYSQLとPHPについて修正中ですが、まだ非常に初心者です。誰かが私がここで間違っていることを指摘できますか?

UPDATE mage_catalog_product_entity_text 
SET value=" . $row['value2'] . " 
WHERE value = " . $row['value']; 

値が現在の値と等しい別の変数に値を設定しようとしています。つまり、value2は私が更新しているものであり、valueは単なる「テスト」です。

私が得るエラーは次のとおりです。

Unknown column 'test' in 'where clause'

編集:このクエリ全体をエコーすると同じエラーが返されるため、「テスト」がまったく言及されていないコード全体を投稿することにしました。

<?php // instead of <?

mysql_connect ("localhost","cpsdev_mage1","D******"); 
mysql_select_db ("cpsdev_mage1"); 

$sql = "select value from mage_catalog_product_entity_text WHERE Attribute_id = 64"; 
    $result = mysql_query ($sql) or die($myQuery."<br/><br/>".mysql_error()); 

while($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
$lines = file('/media/dev/' . $row['value']);
echo "UPDATE mage_catalog_product_entity_text SET value=" . $lines . "WHERE value = '"     . $row['value']; . "'";
}

?>

データベースにある行は次のとおりです。Attribute_id値64データ109その他のデータ

編集:解決済み-私の間違いは、提案された編集で間違った場所にftpで送信したことでした

4

6 に答える 6

1

SQL では、文字列値は一重引用符で区切られます。

SQL でこの種のことを行うには:

    UPDATE mage_catalog_product_entity_text 
    SET value= 'new'
    WHERE value = 'old'

...そしてPHPでは:

$sql = "UPDATE mage_catalog_product_entity_text " .
       " SET value= '" . $row['value2'] . 
       "' WHERE value = '" . $row['value'] . "'";

各句に 2 つの余分な一重引用符が追加されていることに注意してください。

于 2012-10-30T12:40:35.883 に答える
0

値が であるかどうかを確認しようとしていることは間違いありませんtest。そうするために文字列をエンクォートします。

SET value='" . $row['value2'] . "'
WHERE value = '" . $row['value']; . "'

ただし、実際にはクエリをパラメーター化する必要があり、そうでない場合はデータをエスケープする必要があります。

于 2012-10-30T12:38:14.037 に答える
0

valueあなたの列はテキスト列だと思います。次に、where 値を引用符で囲む必要があります。

UPDATE mage_catalog_product_entity_text 
SET value='" . $row['value2'] . "'
WHERE value = '" . $row['value'] . "'"; 
于 2012-10-30T12:39:04.870 に答える
0

正しく引用していることを確認してください。クエリが二重引用符で囲まれていると仮定します。

$query = "UPDATE mage_catalog_product_entity_text" .
         "SET value='" . $row['value'] . "'" .
         "WHERE value = '" . $row['value2'] . "';";

(ドットは文字列を連結するだけです)

編集の「エコー」について:

echo "UPDATE mage_catalog_product_entity_text SET value='$lines' WHERE value = '" . $row['value'] . "'";

二重引用符を使用しているため、標準変数 $lines は外側にある必要はありません。

于 2012-10-30T12:40:24.313 に答える
0

エラー メッセージは、操作しようとしているテーブルにという名前のがないことを明確に示していますtestecho()クエリを実行して、実際にどのように見えるかを確認することをお勧めします。さらに、文字列値を引用符で囲む必要があるため、クエリは間違った構文を使用しています。

WHERE value='" . $row['value'] . "'";

またはさらに良い:

$query = sprintf(  "UPDATE `mage_catalog_product_entity_text` "
                 . "SET `value`='%s' WHERE `value`='%s'",
                   $row['value2'], $row['value']);
于 2012-10-30T12:37:18.770 に答える
0

準備されたクエリ (mysqli/pdo) を調べてください。いずれかの「値」の内容に SQL コードが含まれていて、通常の SQL として実行された場合、達成しようとしていることが悲惨な結果になる可能性があります。特にユーザーが送信した値について考えてください。それ以外の場合は、値を適切に引用するとともに、必ず mysql_real_escape を使用してください。

于 2012-10-30T12:48:11.640 に答える