Вставка значений в таблицу MySQL с помощью PHP

0

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

Чтобы упростить. Я хочу вызвать количество показов, отображаемых в текущем объявлении. У объявления 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);

Изменить: Вот структура в 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
    @Andrei Андрей Корчагин - Нечеткий вопрос, избыточный SQL и проблемный SQL синтаксис. Не хотите обновить ваш вопрос схемой таблицы?
  • 0
    Если $writeVar является действительным идентификатором объявления, зачем увеличивать его? Если вы сделаете это, показ больше не будет связан с объявлением, которое его сгенерировало.
Показать ещё 6 комментариев
Теги:

3 ответа

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
    +1 за супер простое решение и исправление.
  • 0
    Я думаю, проблема в том, как я структурировал свои таблицы сейчас. Я просто сделал таблицы в соответствии с моей схемой, но это кажется одномерным. Мне некуда положить что-то вроде «views», «ad_id» или что-то в этом роде.
Показать ещё 1 комментарий
0

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

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

Кроме того, ваш синтаксис 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);

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

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

  • 1
    mysql_fetch_array сохраняет одну строку в массиве, она не заполняет многомерный массив, содержащий все строки и их столбцы. Опустить [0].
  • 0
    Спасибо, уже думал, но не был уверен, я создал свой собственный класс базы данных и немного забыл о простых синтаксисах mysql.
Показать ещё 1 комментарий
-1

Что-то вроде не по теме, но все еще связано с тем, что вы изучаете php/MySQL:

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

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

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

у вас будет следующее:

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

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

  • 0
    Это не имеет абсолютно никакого отношения к скорости запросов, к запросам в целом и со здравым смыслом вообще. Это просто вопрос стиля, и каждый может свободно выбирать свой любимый. Что касается меня, то первый способ гораздо более плавный.
  • 0
    Как я уже сказал, я знаю, что читал это некоторое время назад. Я не сказал, что это правило, я просто сказал, что помню, как видел это в статье ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню