0

目前正在接触 MYSQL 和 PHP,但仍然非常初学者。谁能指出我在这里做错了什么:

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

我正在尝试将 value 设置为 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 Value 64 Data 109 一些其他数据

编辑:已解决-我的错误是在建议的编辑中进入错误的位置

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'] . "'";

请注意在每个子句中添加了两个额外的单引号。

于 2012-10-30T12:40:35.883 回答
0

错误消息清楚地表明您尝试使用的表没有任何名为的test。我建议echo()查询看看它到底是什么样子。此外,您的查询使用了不正确的语法,因为必须引用字符串值:

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

毫无疑问,您正在尝试检查该值是否为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

请查看准备好的查询(mysqli/pdo)。如果您的任何一个“值”的内容包含 SQL 代码并且会像普通 SQL 一样执行,那么您试图实现的目标可能是灾难性的。尤其要考虑用户提交的值。否则,请务必将 mysql_real_escape 与正确引用值结合使用。

于 2012-10-30T12:48:11.640 回答