2010-12-02 3 views
0

У меня есть массив PHP, который имеет несколько значений в нем, соответствующих различным баннерным объявлениям. Скажем, $ a вызывается, что будет 0-м значением в массиве. У меня есть поле в таблице показов, также называемое , которое содержит целое число. Я хочу называть это целое из этого поля, увеличивать его и возвращать в одну строку.Вставка значений в таблицу MySQL с PHP

Для упрощения. Я хочу вызвать количество показов, отображаемых в текущем объявлении. У объявления ad $ a есть 500 показов. Я хочу увеличить это число до 501 и вернуть его обратно в таблицу.

Надеюсь, я объяснил достаточно хорошо. Вот мой код до сих пор:

$ads = array($a, $b, $c, $d, $e, $f, $g, $h, $i, $j); 
$rand = rand(0,9); 
print($ads[$rand]); 
$writeVar = $rand; 

$con = mysql_connect("localhost","delives0_ads","ads"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("delives0_ads", $con); 
$sqlCmd = mysql_query("SELECT * FROM impressions ('$writeVar');"); 
$sqlCmd++; 
mysql_query("INSERT INTO impressions ('$writeVar`) VALUES ('$sqlCmd');"); 
mysql_close($con); 

Edit: Вот структура в SQL

CREATE TABLE IF NOT EXISTS `impressions` (
    `0` int(11) NOT NULL, 
    `1` int(11) NOT NULL, 
    `2` int(11) NOT NULL, 
    `3` int(11) NOT NULL, 
    `4` int(11) NOT NULL, 
    `5` int(11) NOT NULL, 
    `6` int(11) NOT NULL, 
    `7` int(11) NOT NULL, 
    `8` int(11) NOT NULL, 
    `9` int(11) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
+0

@ Андреа Корчагин - Нечеткий вопрос, избыточный sql и проблемный синтаксис sql. Не забудьте обновить свой вопрос схемой таблицы? – ajreal 2010-12-02 07:09:12

+0

Если `$ writeVar` - это фактический идентификатор объявления, почему вы его увеличиваете? Если вы сделаете это, это впечатление больше не будет связано с объявлением, которое сгенерировало его. – prodigitalson 2010-12-02 07:13:50

+0

Какой формат вам нужен, чтобы была схема? Я попытался сделать это как текст, но это был кошмар форматирования. – AKor 2010-12-02 07:17:43

ответ

0

Ну ... $sqlCmd не имеет никаких данных, вы должны mysql_fetch_array(); (это будет получать данные из запроса) прежде чем начать манипулировать данными.

http://php.net/manual/en/function.mysql-fetch-array.php

Plus, ваш синтаксис mysql_query(); неправильно. Смотрите руководство: http://www.php.net/manual/en/function.mysql-query.php

EDIT:

mysql_select_db("delives0_ads", $con); 
$sqlCmd = mysql_query("SELECT * FROM impressions WHERE `something` = '$writeVar';"); // replace something with your needed identifier in database structure 
$sqlCmd = mysql_fetch_array($sqlCmd); // will fetch data in array 
$yourData = $sqlCmd['what_you_want_to_get_from_table']; // what_you_want..._table is the variable you want to increment. 
$yourData++; 
mysql_query("UPDATE impressions SET `yourvariable` = '$yourData' WHERE `something` = '$writeVar';"); // updates data 
mysql_close($con); 

Если вы могли бы обеспечить структуру базы данных, мы могли бы помочь вам получить идеальный сценарий!

P.S. Не знаю, работает ли это на самом деле (не могу проверить, не использовал простой синтаксис mysql в течение длительного времени), но я думаю, что это нужно. Если это не так, проблема заключается в $yourData = $sqlCmd[0]..., вам просто нужно удалить [0].

5

Вам не нужен запрос SELECT и UPDATE для увеличения столбца в таблице.

Просто отправьте один UPDATE запрос [пример]:

UPDATE impressions SET views = views + 1 WHERE ad_id = 3 

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

Если я мог бы предложить книгу или два:

http://www.amazon.com/Build-Database-Driven-Using-MySQL/dp/0980576814/ref=dp_ob_title_bk

http://www.amazon.com/Simply-SQL-Rudy-Limeback/dp/0980455251

-1

Вещь вроде по теме, но все еще связаны с вами обучения PHP/MySQL:

С что я знаю, когда вы делаете запросы, лучше добавить такие вары: '". $ var."' вместо '$ var'

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

mysql_query("SELECT * FROM impressions ('$writeVar');"); 

вы будете иметь это:

mysql_query("SELECT * FROM impressions ('".$writeVar."');"); 

Я не помню, где я читал, но это было что-то связано с оптимизацией скорости запросов.

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