2015-05-30 6 views
1

Я пытаюсь обновить для некоторых продуктов свою категорию в базе данных. Я хочу найти продукты, которые имеют от их имени определенное слово, и после этого я хочу обновить категорию для этих продуктов.Обновить таблицу базы данных с помощью PHP

Я хочу, чтобы выбрать идентификатор из sho_posts где 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 результат

+0

Удалите кавычки вокруг стола имя и имя столбца в обновлении sql –

+0

, если я это сделаю, это ошибка: синтаксическая ошибка, неожиданная '' sho_term_relationships '' (T_CONSTANT_ENCAPSED_STRING) в ... –

+0

Только что заметил $ row - это объект. Используйте $ row {'id'} –

ответ

0

Попробуйте это:

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

И убедитесь, что для выполнения запроса mysql_query($sql)

Кроме того, я думаю, что вы можете добавить этот запрос внутри цикла while

+0

, но это мой код :) –

+0

Это немного другое. Не использовать кавычки в имени таблицы, имени столбца и задании значения поля для свойства объекта в отличие от всего объекта $ row. –

+0

. Эта переменная не будет корректно анализироваться из такой строки. Вместо этого вам нужно выполнить '[...] WHERE object_id =". $ Row {'id'}; ' – Mike

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); 
} 

Затем необходимо выбрать данные, как это (при условии, что срок не может быть таким же, каждый раз, и может быть Выходец из post variable с именем search).

Edit: Например, если у вас есть форма 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 ($result->fetch()) { 
    ... stuff you want to do here... 
} 
$result->close(); 

Тогда вы будете использовать это в запросе обновления (который будет принимать подобный синтаксис), и вы можете просто получить информацию от $ ид который был создан с выше 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(); 

это может занять немного привыкнуть к этому, но я считаю, что легче разобрать, а также является гораздо более безопасным

+0

Я получаю сообщение об ошибке «Вызовите функцию-член() для не-объекта в ...» –

+0

Обычно это происходит с плохим запросом. Мне нужна полная ошибка – nomistic

+0

Звоните на функцию-член prepare() на не-объект в /srv/disk8/34444/www/localhost.com/shop/scriptik.php в строке 14 Это все, что я получаю –

Смежные вопросы