SQL-запрос SET & Update, но не вызывается из PHP

0

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

Имя таблицы: num_image

Название колонки: rownum

Это SQL, который я использую:

SET @rownum := 0; 
UPDATE num_image SET rownum = (@rownum:=@rownum+1) ORDER BY RAND();

Я попытался ввести его в свой PHP-код следующим образом:

<?php
  // Connect to database
  include 'DB.php';
  $con = mysql_connect($host,$user,$pass);
  $dbs = mysql_select_db($databaseName, $con);

  // Assigns a new random number with no duplicates to database for each rownum row.

  $updaterownum = mysql_query("SET @rownum := 0; UPDATE num_image SET rownum = (@rownum:=@rownum+1) ORDER BY RAND();");

  echo 'All rownums have been updated!';

?>

Соединение с моей базой данных отлично работает, поскольку я использую то же самое для других обновлений и вставок баз данных. Итак, я сузил его до того, как я вставляю фактический SQL в свой PHP-вызов и считаю, что мне нужно изменить способ, которым я его называю?

Я уверен, что это нечто незначительное, что я пропустил, хотя я в тупике. Заранее спасибо!

  • 1
    Вы выполняете два SQL-запроса за один запрос. Это не может быть сделано. Вы также не должны использовать расширение mysql, оно устарело. об этом говорится в руководстве: php.net/manual/en/function.mysql-query.php
  • 0
    @KIKO Software: Сервер, который я использую, имеет только 5.6.39, поэтому мне приходится работать с тем, что у меня есть в данный момент. Спасибо за направление в отношении двух запросов SQl в одном вызове.
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Следующий полированный код может выполнять эту работу на PHP. Однако, как упоминалось в комментариях; Расширение mysql устарело и будет удалено в будущем.

<?php
  // Connect to database
  include 'DB.php';
  $con = mysql_connect($host,$user,$pass);
  $dbs = mysql_select_db($databaseName, $con);
  if($con)
  {
        $updaterownum = mysql_query("SET @rownum := 0");
        $updaterownum = mysql_query("UPDATE num_image SET rownum = (@rownum:=@rownum+1) ORDER BY RAND()");
        if(mysql_affected_rows()>0)
        {
            echo 'All rownums have been updated!';
        }
        else
        {
            echo "Nothing changed after running update query!";
        }
  }
  else
  {
      echo "Not able to connect";
  }
?>
  • 0
    Большое спасибо, именно то, что мне нужно, и работает лакомство. Я знаю, что лучше всего обновиться до mysqli, хотя в настоящее время не позволяет, и это то, что я должен буду сделать в будущем. Спасибо за работу с моими нынешними ограничениями, я очень ценю это.
2

Я вижу документ по адресу: http://php.net/manual/en/mysqli.quickstart.multiple-statement.php

Вот несколько кратких строк:

MySQL необязательно позволяет иметь несколько операторов в одной строке оператора. Отправка нескольких операторов сразу уменьшает количество обращений к клиент-серверу, но требует специальной обработки.

Несколько операторов или несколько запросов должны выполняться с помощью mysqli_multi_query(). Отдельные операторы строки оператора разделяются точкой с запятой. Затем должны быть получены все результирующие наборы, возвращаемые исполняемыми операторами.

Сервер MySQL позволяет иметь инструкции, которые возвращают наборы результатов и операторы, которые не возвращают множества результатов в одной инструкции.

  • 0
    Спасибо за информацию :-), когда я обновлюсь до текущего mysql, я это реализую.

Ещё вопросы

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