Имя: Пароль:
IT
Веб-мастеринг
Не работает bind_param
0 megabax
 
19.05.15
09:12
Добскажите пожалуйста, почему может не работать bind_param?
вот такой код:
    echo "Начало<br>";

    include_once("db.php");
    include_once("ini.php");
    include_once("shopconfing.php");

    echo "Подключили модули<br>";
    $conf=InitConf();
    
    //подключение к базе данных джумлы
    if(!mysql_connect($conf['HostName'],$conf['UserName'],$conf['Password']))  {
        echo "<h1><font color=red>Error connect to ".$DBName."!<br>".mysql_error()."<br></font></h1>";
    }
    mysql_select_db($conf['DBName']);
    
    echo "Подключились к базе джумлы<br>";
    
    
    //подключение к базе данных движка
    $db=new EP_DBService();
    $db->HostName=DB_HOST;
    $db->UserName=DB_USER;
    $db->Password=DB_PASSWORD;
    $db->DBName=DB_NAME;    
    $db->Prefix=DB_PREFIX;    
    
    echo "Подключились к базе движка<br>";
    
    //запрос к статьям
    mysql_query('SET NAMES utf8');
    $query="select * from jos_content ";
    $rows_selection=mysql_query($query);

    echo "Выполнили запрос к джумле<br>";
    
    
    if($rows_selection) {
        echo "Запрос выполнился нормально<br>";
    } else {
        echo "<h1><font color=red>Ошибка запроса: ".mysql_error()."</font></h1>";
        echo "<h2><font color=blue>Запрос: ".$query."</font></h2>";
        exit();
    }    
    
    $mysqli=$db->mysqli_connect();
    
    $count=mysql_num_rows($rows_selection);
    echo "В запросе $count строк<br>";
    
    $mysqli->query('SET NAMES utf8');    
    
    //id
    //title
    //code
    //introtext+fulltext
    //sectionid
    //created
    //modified
    //access
    //hits
    for($i=1; $i<=$count; $i++) {
        $arr=mysql_fetch_array($rows_selection);
        //$text=$arr["introtext"].$arr["fulltext"];
        $query = "insert into ep_articles(name) values (?)";
        try {
            $stmt = $mysqli->prepare($query);    
        } catch (Exception $exc) {
            //echo $query."\n".$stmt->errorInfo();
            echo "ERROR PREPARE";
        }

        echo "Подготовли запрос $i<br>";
        $stmt->bind_param('s',"wwwwww");
        //echo "<p><b>".$arr["title"]."  ".$arr["id"]." ".$text." "."</b></p>";
        /*try {
            $stmt->bind_param('s',"eeeeee"); //s - строка, d - число
        } catch (Exception $exc) {
            //echo $stmt->errorInfo();
            echo "ERROR bind_param";
        }*/
        echo "Вставили параметры $i<br>";
        
        if(!$stmt->execute()) {
            echo "ERROR";
        }
    
        /*echo "Зашли в цикл $i<br>";
        $arr=mysql_fetch_array($rows_selection);
        $text=$arr["introtext"].$arr["fulltext"];
        $query = "insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values ('".$arr["title"]."',".$arr["id"];
        $query=$query.",?,".$arr["sectionid"].",".$arr["created"].",".$arr["modified"].",".$arr["access"].",".$arr["hits"].")";
        //$query=$query.",'".$text."',".$arr["sectionid"].",".$arr["created"].",".$arr["modified"].",".$arr["access"].",".$arr["hits"].")";
        echo "Сформировали запрос $i<br>";
        
        $stmt = $mysqli->prepare($query);
        echo "Подготовли запрос $i<br>";
        $stmt->bind_param('s',$text);
        echo "Вставили параметры $i<br>";
        
        if(!$stmt->execute()) {
            echo "ERROR";
        }
        /*$stmt->bind_result($res);

        
        $res=$mysqli->query($query);
        if(!$res) {
            echo "Ошибка добавления статьи ".$query;
            return 0;
        }*/        
        //echo $arr["title"]."<br>";
    }

    echo "Закачали статьи<br>";

Доходит до строк $stmt->bind_param('s',"wwwwww"); и дальше валиться. Просто преращаеся выполенние и все. Почему? Пробовал обернуть в try catch, не выдает никакой ошибки.
1 фобка
 
19.05.15
09:15
Форум не перепутал?
2 megabax
 
19.05.15
09:24
(1) Ну я же все таки в секции web-мастеринк задал вопрос....
3 zenik
 
19.05.15
09:25
По моему запрос подготавливают 1 раз, и циклом потом bind, а не наоборот...
4 megabax
 
19.05.15
09:33
(3) Вынес подготовку запроса во вне цикла, все равно не работает:
<?php
    
    echo "Начало<br>";

    include_once("db.php");
    include_once("ini.php");
    include_once("shopconfing.php");

    echo "Подключили модули<br>";
    $conf=InitConf();
    
    //подключение к базе данных джумлы
    if(!mysql_connect($conf['HostName'],$conf['UserName'],$conf['Password']))  {
        echo "<h1><font color=red>Error connect to ".$DBName."!<br>".mysql_error()."<br></font></h1>";
    }
    mysql_select_db($conf['DBName']);
    
    echo "Подключились к базе джумлы<br>";
    
    
    //подключение к базе данных движка
    $db=new EP_DBService();
    $db->HostName=DB_HOST;
    $db->UserName=DB_USER;
    $db->Password=DB_PASSWORD;
    $db->DBName=DB_NAME;    
    $db->Prefix=DB_PREFIX;    
    
    echo "Подключились к базе движка<br>";
    
    //запрос к статьям
    mysql_query('SET NAMES utf8');
    $query="select * from jos_content ";
    $rows_selection=mysql_query($query);

    echo "Выполнили запрос к джумле<br>";
    
    
    if($rows_selection) {
        echo "Запрос выполнился нормально<br>";
    } else {
        echo "<h1><font color=red>Ошибка запроса: ".mysql_error()."</font></h1>";
        echo "<h2><font color=blue>Запрос: ".$query."</font></h2>";
        exit();
    }    
    
    $mysqli=$db->mysqli_connect();
    
    $count=mysql_num_rows($rows_selection);
    echo "В запросе $count строк<br>";
    
    $mysqli->query('SET NAMES utf8');    
    
    //id
    //title
    //code
    //introtext+fulltext
    //sectionid
    //created
    //modified
    //access
    //hits
    $query = "insert into ep_articles(name) values (?)";
    try {
        $stmt = $mysqli->prepare($query);    
    } catch (Exception $exc) {
        //echo $query."\n".$stmt->errorInfo();
        echo "ERROR PREPARE";
    }
    echo "Подготовли запрос вне цикла<br>";

    for($i=1; $i<=$count; $i++) {
        $arr=mysql_fetch_array($rows_selection);
        //$text=$arr["introtext"].$arr["fulltext"];

        echo "Сейчас буем вставлять параметры $i<br>";
        $stmt->bind_param('s',"wwwwww");
        //echo "<p><b>".$arr["title"]."  ".$arr["id"]." ".$text." "."</b></p>";
        /*try {
            $stmt->bind_param('s',"eeeeee"); //s - строка, d - число
        } catch (Exception $exc) {
            //echo $stmt->errorInfo();
            echo "ERROR bind_param";
        }*/
        echo "Вставили параметры $i<br>";
        
        if(!$stmt->execute()) {
            echo "ERROR";
        }
    
        /*echo "Зашли в цикл $i<br>";
        $arr=mysql_fetch_array($rows_selection);
        $text=$arr["introtext"].$arr["fulltext"];
        $query = "insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values ('".$arr["title"]."',".$arr["id"];
        $query=$query.",?,".$arr["sectionid"].",".$arr["created"].",".$arr["modified"].",".$arr["access"].",".$arr["hits"].")";
        //$query=$query.",'".$text."',".$arr["sectionid"].",".$arr["created"].",".$arr["modified"].",".$arr["access"].",".$arr["hits"].")";
        echo "Сформировали запрос $i<br>";
        
        $stmt = $mysqli->prepare($query);
        echo "Подготовли запрос $i<br>";
        $stmt->bind_param('s',$text);
        echo "Вставили параметры $i<br>";
        
        if(!$stmt->execute()) {
            echo "ERROR";
        }
        /*$stmt->bind_result($res);

        
        $res=$mysqli->query($query);
        if(!$res) {
            echo "Ошибка добавления статьи ".$query;
            return 0;
        }*/        
        //echo $arr["title"]."<br>";
    }

    echo "Закачали статьи<br>";
?>
5 zenik
 
19.05.15
09:45
Не мучайся, делай запись без подготовленного запроса. Выгоды не получишь, а когда вырастешь - переделаешь :)
6 megabax
 
19.05.15
09:47
(5) В том то и дело, что без параметрического запроса никак не получается, нужно вставить в таблицу текс, который может содержать и кавычки, и апострофы а так же и то  и другое вместе.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший