Имя: Пароль:
IT
Веб-мастеринг
Как средствами PHP вставить в базу данных MySQL текст, где есть и "" и ''
,
0 megabax
 
06.04.15
22:03
Добрый день.
Выполняю вот такой код:
        $query = "insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values ('".$arr["title"]."',".$arr["id"];
        $query=$query.",'".$text."',".$arr["sectionid"].",".$arr["created"].",".$arr["modified"].",".$arr["access"].",".$arr["hits"].")";
        $res=$mysqli->query($query);
Выдате ошибку. Я так понял, из за того, что в переменной $text могут быть как кавычки, так и апостофы. И как теперь записать этот текст в базу данных?
1 Torquader
 
06.04.15
22:23
Смотри mysqli расширение и prepare и execute, чтобы можно было сначала параметр вопросом проставить, а уже потом в структуру параметров передать значение.
Ну или смотри "экранирование", там даже функция специальная для этого есть.
2 dsank
 
07.04.15
02:30
Делай через экранирование:
$query = "insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values (\'".$arr["title"]."\',".$arr["id"];
3 megabax
 
07.04.15
09:11
(1) Спасибо, но почему то на перестает выполняться код. Подскажите пожалуйста, как лечить:

    for($i=1; $i<=$count; $i++) {
        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>";
    }
4 megabax
 
07.04.15
09:12
(2) Через экранирование точно так же не работает
5 Лефмихалыч
 
07.04.15
09:30
(3) экранирование выглядит так: "блабла \" блабла" внутри строки кавычка экранирована \"
6 Лефмихалыч
 
07.04.15
09:31
А вот это вот:
$query = "insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values ('".$arr["title"]."',".$arr["id"];

для интерпретатора выглядит, как
строка $query = "insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values ('"
и какая-то непонятная кухнЯ  .$arr["title"]."',".$arr["id"];
7 dsank
 
07.04.15
14:34
Проверил, надо заменить " на ' Т.е.
$query = 'insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values (\''.$arr["title"].'\','.$arr["id"];
Так работает.
8 dsank
 
07.04.15
14:41
+(7) Только ты еще закрывающуюся кавычку потерял .')'

$query = 'insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values (\''.$arr["title"].'\','.$arr["id"].')';
9 dsank
 
07.04.15
14:44
$i1 = 'i1';
$i2 = 'i2';
$query = 'insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values (\''.$i1 .'\','.$i2.')';

echo $query;

Результат:
insert into ep_articles(name,code,contect,sectioncode,date,date_modify,access,hits) values ('i1',i2)
10 Asmody
 
07.04.15
14:48
А забиндить все параметры рука не поднимается?
11 Fragster
 
гуру
07.04.15
14:56
12 Asmody
 
07.04.15
14:57
(11) у синглтона конструктор должен быть приватным
13 Fragster
 
гуру
07.04.15
15:14
(12) зато безопасно вставляет кучу строк
14 megabax
 
07.04.15
18:51
Попробовал выполнить вот такой код:
    for($i=1; $i<=$count; $i++) {
        $arr=mysql_fetch_array($rows_selection);
        $text=$arr["introtext"].$arr["fulltext"];
    
        $query = "insert into ep_articles(contect) values (?)";
        $stmt = $mysqli->prepare($query);
        echo "Подготовли запрос $i<br>";
        $stmt->bind_param('s',$text);
        echo "Вставили параметры $i<br>";
}
Та же самая фигня, на $stmt->bind_param('s',$text);
прекращает выполнение программы
15 Fragster
 
гуру
07.04.15
18:54
contect не текст?
16 megabax
 
07.04.15
18:57
(15) текст
17 megabax
 
07.04.15
18:59
(15) А что, mysqli с текстом не работает?
18 megabax
 
07.04.15
19:00
вот такой вот код прокатил
        $arr=mysql_fetch_array($rows_selection);
        //$text=$arr["introtext"].$arr["fulltext"];
        $text="sdfdsf";
        $query = "insert into ep_articles(name) values (?)";
        try {
            $stmt = $mysqli->prepare($query);    
        } catch (Exception $exc) {
            //throw new Exception($query1."\n".$this->errorInfo());
            echo $query."\n".$this->errorInfo();
        }

        echo "Подготовли запрос $i<br>";
        $stmt->bind_param('s',$text);
        echo "Вставили параметры $i<br>";
        
        if(!$stmt->execute()) {
            echo "ERROR";
        }
Но как заставить php добавить в базу именно текст?
19 Fragster
 
гуру
07.04.15
19:01
(17) работает. просто оно проверяет, если ты ему лажу пытаешься всучить, например поле не того типа, или вообще отсутствующее поле
20 Fragster
 
гуру
07.04.15
19:02
(18) какой тип колонки "contect"? нет ли ошибки в написании? может таки "content"?
21 Gepard
 
07.04.15
19:28
(18) а потом удивляются, как это их сайты ломают?

давно пора использовать параметры, а не динамические запросы.