使用PHP更新数据库表

时间:2015-05-30 20:30:04

标签: php mysql

我正在尝试为某些产品更新数据库中的类别。我想找到其名称中包含特定字词的产品,之后我想更新此产品的类别。

我想从sho_posts中选择ID,其中sho_posts.post_title包含单词'%Audio CD%'的这一部分,然后更新sho_term_relationships.term_taxonomy_id,其值为sho_term_relationships.object_id=sho_posts.id

我写了一些PHP代码,但它只做了选择部分。有什么问题?

 <?php


$username = "user_name";
$password = "password";
$hostname = "host";

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
    or die("Unable to connect to MySQL");

$selected = mysql_select_db("1812233_shoping",$dbhandle)
    or die("Could not select examples");
echo "Connected to MySQL<br>";
$result = mysql_query ("SELECT `id` FROM `sho_posts` WHERE CONVERT(`post_title` USING utf8) LIKE '%Audio CD%' ");
while ($row = mysql_fetch_array($result)) {
    echo "ID:".$row{'id'}."<br>";
}

$sql =  "UPDATE 'sho_term_relationships'
   SET 'term_taxonomy_id' = '123'
 WHERE 'object_id' = $row";
//close the connection
mysql_close($dbhandle);

我现在的新脚本是:

$username = "_shoping";
$password = "password";
$hostname = "localhost";

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
    or die("Unable to connect to MySQL");

$selected = mysql_select_db("_shoping",$dbhandle)
    or die("Could not select examples");
echo "Connected to MySQL<br>";
$result = mysql_query ("SELECT `id` FROM `sho_posts` WHERE CONVERT(`post_title` USING utf8) LIKE '%Audio CD%' ");
while ($row = mysql_fetch_array($result)) {
    $id[] = $row['id'];
    /*echo "ID2:".$id."<br>";*/
}


foreach ($id as $value) {
    echo "value:".$value."<br>";
}

/*$id = $row['id'];*/
$sql =  "UPDATE sho_term_relationships
         SET term_taxonomy_id = '123'
         WHERE object_id =".$value;
mysql_query($sql);
//close the connection
mysql_close($dbhandle);

现在它进行了更新但仅针对一行,如何为所有行进行更新?从选择查询我得到4结果

2 个答案:

答案 0 :(得分:0)

试试这个:

$sql =  "UPDATE sho_term_relationships
         SET term_taxonomy_id = '123'
         WHERE object_id = ".$row{'id'};

并确保运行查询mysql_query($sql)

此外,我认为您可能希望在while循环

中添加此查询

答案 1 :(得分:0)

您使用单引号而不是反引号(在这种情况下不需要)。将更新查询更改为:

$sql = "UPDATE sho_term_relationships
SET term_taxonomy_id = 123
WHERE object_id = $row";

此外,您缺少一些代码;在该查询上不会调用任何内容。它根本没有被执行。

此外,您还有其他一些问题,主要是由于sql注入的高风险。首先停止使用mysql_函数,不推荐使用它们。您应该准备变量。这是以mysqli_格式演示脚本的关键部分。

这也应解决您问题的 (如果我不完全理解您的原始问题,可能会有更多<)>。

您可以像这样调用您的数据库(并检查错误)

$dbhandle = new mysqli($hostname, $username, $password);
    if  ($dhandle->connect_error) {
    die("Connection failed: " . $dbhandle->connect_error);
}

然后你会选择这样的数据(假设每次术语可能不一样,并且可能来自名为search的后置变量)。

编辑例如,如果你有一个HTML表单,就是这样得到这个变量:

<input type="select" name="search_term" />

您将变量命名为:

$search = $_POST['search_term'];

然后将其设置为查询like运算符

$search_term = '%'.$search.'%';
$result = $dbhandle->prepare("SELECT `id` 
                          FROM `sho_posts` 
                          WHERE CONVERT(`post_title` USING utf8) 
                          LIKE ? ");
$result->bind_param("s",$search_term);
$result->execute();
$result->bind_result($id);

然后你可以通过while循环获取数据

while ($result->fetch())  {
   ... stuff you want to do here...
}
$result->close();

然后你会在你的更新查询中使用它(这将采用类似的语法),你可以从上面的bind_result创建的$ id中获取信息:

$sql = $dbhandle->("UPDATE sho_term_relationships
        SET term_taxonomy_id = 123
        WHERE object_id = ?");
$sql->bind_param("s",$id);
$sql->execute();
$sql->close();

可能需要一点点习惯,但我觉得解析起来更容易,也更安全