Я пытаюсь обновить строки таблицы, чтобы иметь случайные числа. Теперь я могу достичь этого, используя 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-вызов и считаю, что мне нужно изменить способ, которым я его называю?
Я уверен, что это нечто незначительное, что я пропустил, хотя я в тупике. Заранее спасибо!
Следующий полированный код может выполнять эту работу на 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";
}
?>
Я вижу документ по адресу: http://php.net/manual/en/mysqli.quickstart.multiple-statement.php
Вот несколько кратких строк:
MySQL необязательно позволяет иметь несколько операторов в одной строке оператора. Отправка нескольких операторов сразу уменьшает количество обращений к клиент-серверу, но требует специальной обработки.
Несколько операторов или несколько запросов должны выполняться с помощью mysqli_multi_query(). Отдельные операторы строки оператора разделяются точкой с запятой. Затем должны быть получены все результирующие наборы, возвращаемые исполняемыми операторами.
Сервер MySQL позволяет иметь инструкции, которые возвращают наборы результатов и операторы, которые не возвращают множества результатов в одной инструкции.