Здравствуйте! Подскажите по скрипту, все вроде правильно, есть похожие скрипты они работают, этот подвисает(грузиться в браузере) и все. Задача скрипта считать имена команд и проверить есть ли они в таблице БД. Вот файл: 'Instituto de Cordoba','Esgueira' 'La Union','Vitoria W' 'Ferro','Olivais W' 'Penarol','Gdessa Barreiro W' 'Malaysia Dragons','Natacao W' 'Singapore Slingers','Guifoes W' Вот скрипт: PHP: <?php ini_set('max_execution_time', 0); ini_set('display_errors', true); error_reporting(-1); $db = mysqli_connect("localhost", "root", "xxxxxx","scorechart"); mysqli_select_db($db,"scorechart"); mysqli_set_charset($db,'utf8'); $f = fopen("C:\Apache24\htdocs\Main2\List_Eng_Teams_Column.csv", "r"); while (!feof($f)) { $arrM = explode(",",fgets($f)); $query_select1 = "select * from tteam where team_eng = $arrM[0]"; $query_select2 = "select * from tteam where team_eng = $arrM[1]"; $result1 = mysqli_query($db,$query_select1); $result2 = mysqli_query($db,$query_select2); $num_rows1 = mysqli_num_rows($result1); if($num_rows1 == 0) { echo "<br>------------------<br>".'$num_rows = '.$num_rows1.'Команда не найдена!'.$arrM[0]."<br>------------------<br>"; } else { echo "<br>------------------<br>".'$num_rows = '.$num_rows1.'Команда найдена!'.$arrM[0]."<br>------------------<br>"; } $num_rows2 = mysqli_num_rows($result2); if($num_rows2 == 0) { echo "<br>------------------<br>".'$num_rows = '.$num_rows2.'Команда не найдена!'.$arrM[1]."<br>------------------<br>"; } else { echo "<br>------------------<br>".'$num_rows = '.$num_rows2.'Команда найдена!'.$arrM[1]."<br>------------------<br>"; } } fclose($f); mysqli_close($db); ?>
@Methodman, всё, что можно было сделать неправильно в этом скрипте... сделано. Вы бы лучше подробнее описали саму задачу, например, что это за файл, почему два столбца и какова конечная цель этих "махинаций". На будущее: если запрос к базе данных внутри цикла (любого) , то 99% это неправильное решение.
Изначальная задача: Есть csv файл вида: 'Instituto de Cordoba' 'Esgueira' 'La Union' 'Vitoria W' 'Ferro' 'Olivais W' 'Penarol' 'Gdessa Barreiro W' 'Malaysia Dragons' 'Natacao W' 'Singapore Slingers' 'Guifoes W' В БД есть таблица tteam, в таблице есть поле team_eng с наименованиями команд как в csv файле. Задача такая: Взять строку из csv файла т.е. имя команды и найти ее в поле(столбце) team_eng таблицы tteam. Если команда найдена в столбце team_eng то вывести на экран что такая команда есть в таблице, если нету в столбце team_eng этой команды, то вывести на экран что такой команды из csv файла в столбце team_eng таблицы tteam нет. Так как у меня мало знаний в php я не смог сделать скрипт чтобы прочитать один столбец csv файла, но есть очень похожий скрипт где в csv не один столбец а несколько, соответственно можно сделать массив из каждой строки csv файла и использовать его. Следовательно, в новой задаче, я разделил один столбец csv файла на два: 'Instituto de Cordoba','Esgueira' 'La Union','Vitoria W' 'Ferro','Olivais W' 'Penarol','Gdessa Barreiro W' 'Malaysia Dragons','Natacao W' 'Singapore Slingers','Guifoes W' Соответственно в таком файле я могу строку превратить в массив из двух элементов и дальше их использовать как я сделал это в первом сообщении этой темы. Вот очень похожий скрипт и он работает: PHP: <?php ini_set('display_errors', true); error_reporting(-1); $hostname = "localhost"; $username = "root"; $password = "xxxxxx"; $dbName = "scorechart"; $db = mysqli_connect("localhost", "root", "xxxxxx","scorechart"); $f = fopen("C:\Apache24\htdocs\Main2\No_In_DB_Insert_With_Check_Procedures_Insert_ID_RA\qwerty.csv", "r"); mysqli_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); $conect = mysqli_connect($hostname,$username,$password); mysqli_select_db($db,"scorechart") or die(mysqli_error()); mysqli_set_charset($db,'utf8'); while (!feof($f)) { $arrM = explode(",",fgets($f)); /* foreach ($arrM as $key => $value) { $arrM[$key] = iconv("windows-1251", "UTF-8",$value); }*/ $query_select = "select * from `tgame` where `date` = $arrM[1] and `teamh_rus` = $arrM[2] and `teama_rus` = $arrM[3] and `score_th` = $arrM[4] and `score_ta` = $arrM[5]"; //echo "<br>------------------<br>".$query_select."<br>------------------<br>"; $result = mysqli_query($db,$query_select); //echo "<br>------------------<br>".mysqli_error()."<br>------------------<br>"; $num_rows = mysqli_num_rows($result); if($num_rows == 0) { echo "<br>------------------<br>".'$num_rows = '.$num_rows.' Дубликаты не найдены, будет встаквка новой записи!'.$arrM[1].'-'.$arrM[2].'-'.$arrM[3]."<br>------------------<br>"; } else { echo "<br>------------------<br>".'$num_rows = '.$num_rows.' Есть дубликаты, вствка новой записи не будет!'.$arrM[1].'-'.$arrM[2].'-'.$arrM[3]."<br>------------------<br>"; } if($num_rows == 0) { $query_insert="insert into `tgame` (`fk_idtleague`, `date`, `teamh_rus`, `teama_rus`, `score_th`, `score_ta`, `sp5_th`, `sp5_ta`,`Comment1`,`Comment2`) values ( $arrM[0], $arrM[1], $arrM[2], $arrM[3], $arrM[4], $arrM[5], $arrM[6], $arrM[7], $arrM[8], $arrM[9] )"; //echo "<br>------------------<br>".$query_insert."<br>------------------<br>"; mysqli_query($db,$query_insert); //echo "<br>------------------<br>".mysqli_error()."<br>------------------<br>"; } /*for ($i = 0; $i <= 8; $i++) { echo $arrM[$i]." "; } echo "<br/>***************************************************************************************************************";*/ } fclose($f); mysqli_close($db); ?> Для меня важен результат а как выглядит скрипт мне не важно, но я конечно же понимаю как он работает.
PHP: <?php require 'autoload.php'; $db = new Aero\Database\Lerma( 'sqlite:db=testo.db', static function ( Archive\MouseZver\Config $config ): void { $config -> ShemaStartingDriver -> sqlite = static function ( Aero\Database\Lerma $lrm, $config ) { $lrm -> query( 'CREATE TABLE IF NOT EXISTS `table_test` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `desc` TEXT NOT NULL )' ); $lrm -> query( 'INSERT INTO `table_test`( `name`, `desc` ) VALUES ( "Instituto de Cordoba", "text and text" ), ( "Esgueira", "text and text" ), ( "Ferro", "text and text" ), ( "Instituto de Cordoba", "text and text" ), ( "Ferro", "text and text" ), ( "Ferro", "text and text" ), ( "Penarol", "text and text" ), ( "Singapore Slingers", "text and text" ), ( "Singapore Slingers", "text and text" ), ( "Instituto de Cordoba", "text and text" ), ( "Penarol", "text and text" ), ( "Ferro", "text and text" ), ( "Singapore Slingers", "text and text" ) ' ); }; } ); $names = file ( 'List_Eng_Teams_Column.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ); $lrm = $db -> query( [ 'SELECT `name`, COUNT(*) FROM `table_test` WHERE `name` IN( %s ) GROUP BY `name`', implode ( ', ', $names ) ] ); while ( [ $name, $count ] = $lrm -> fetch( Aero\Database\Lerma :: FETCH_NUM ) ) { printf ( 'Найден "%s" в количестве (%d)' . PHP_EOL, $name, $count ); } PHP: Найден "Esgueira" в количестве (17) Найден "Ferro" в количестве (68) Найден "Instituto de Cordoba" в количестве (51) Найден "Penarol" в количестве (34) Найден "Singapore Slingers" в количестве (51)
MouseZver, спасибо огромное за столь подробное решение. Но я пока не могу понять как это решение приспособить у себя.