|   |   | 
| 
 | Как средствами 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) а потом удивляются, как это их сайты ломают?
 давно пора использовать параметры, а не динамические запросы. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |