簡體   English   中英

用PHP更新數據庫表

[英]Update database table with PHP

我正在嘗試為某些產品更新其數據庫中的類別。 我想查找名稱中帶有特定字詞的產品,然后再更新該產品的類別。

我想從sho_posts中選擇ID,其中sho_posts.post_title包含單詞'%Audio CD%'這一部分,然后在其中更新sho_term_relationships.term_taxonomy_id的值2,其中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結果

嘗試這個:

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

並確保運行查詢mysql_query($sql)

另外,我認為您可能想在while循環內添加此查詢

您使用的是單引號而不是反引號(在這種情況下沒有必要)。 將更新查詢更改為此:

$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();

然后,您可以在更新查詢中使用它(采用類似的語法),然后可以從$ id中獲取信息,該信息是通過上面的bind_result創建的:

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

可能需要一點時間來習慣這一點,但是我發現它更容易解析,並且更加安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM