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