Памылкі устаўляючы радкі ў часовую табліцу Mysql

Я ўпэўнены, што гэта простае рашэнне, але да гэтага часу я ў тупіку ...

Так што я спрабую ўставіць дадзеныя ў часавую табліцу тузды, выкарыстоўваючы прыведзены ніжэй код:

mysql_query("CREATE TEMPORARY TABLE IF NOT EXISTS data(
id INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id),

name VARCHAR(255))")
or die(mysql_error());

$search_term = 'snakes';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/feeds    
/api/videos?q='.$search_term.'&safeSearch=none&orderby=viewCount&v=2&alt=json&start- 
index=1&max-results=20');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);

$data = json_decode($output,true); 

$info = $data["feed"];
$video = $info["entry"];
$nVideo = count($video);


foreach ($video as $video) {

$video_id = $video['media$group']['yt$videoid']['$t'];
$title = $video['title']['$t'];

$insert = "INSERT INTO data (name)  " .

      "VALUES
       ('$video_id')";             

$results = mysql_query($insert)
or die(mysql_error()); 

}

Калі я пакіну гэты код як ёсць (з $ video_id ў якасці значэння, што я уставіўшы ў табліцу) усё працуе выдатна. Аднак, калі я змяню $ video_id і паспрабаваць ўставіць $ назву замест гэтага, як:

foreach ($video as $video) {

$video_id = $video['media$group']['yt$videoid']['$t'];
$title = $video['title']['$t'];
echo $title;
$insert = "INSERT INTO data (name)  " .

      "VALUES
       ('$title')";             

$results = mysql_query($insert)
or die(mysql_error()); 

}

Я атрымліваю «У Вас ёсць памылка ў вашым SQL сінтаксісу, праверце кіраўніцтва, якое адпавядае версіі сервера MySQL для правільнага сінтаксісу, каб выкарыстоўваць паблізу« ма Снейк (арыгінал/афіцыйны) [Як відаць на Тош.0] ")» у радку 2 ". Цяпер, калі я рэха са значэння для загалоўка ў маім цыкле Еогеаспа як гэта ....

foreach ($video as $video) {

$video_id = $video['media$group']['yt$videoid']['$t'];
$title = $video['title']['$t'];
echo $title;
echo "
"; $insert = "INSERT INTO data (name) " . "VALUES ('$video_id')"; $results = mysql_query($insert) or die(mysql_error()); }

Я атрымаў:

GIANT SNAKE EATS SECURITY GUARD
Snake woman
Biggest Snake of the World for Sale, 25 000 €
Giant Snake
A Huge Centipede Fighting A Snake
Scary Killer Snakes, World Biggest Snake Ever!
Five Headed Snake In India.
Clelia eats Bothrops
snake swallowed a hippo
The world biggest Snake has been found in SAAD - Karaj (Iran)
WORLD LARGEST SNAKE FOUND DEAD! ★★★★★
Cobra vs. Rat Snake
I'm a Snake ( original/official ) [ As seen on Tosh.0 ]
Bull Snake Against Squirrel
The Biggest Snake In The World
Shark Vs. Sea Snake
Killer Karaoke - Karaoke Singer Gets Dunked in a Tank of Snakes
This is What Snake Venom Does to Blood!
Snake befriends its hamster lunch in zoo
ZOMBIE SNAKE HEAD STILL ALIVE!

Я ведаю, што гэтыя значэнні з'яўляюцца радкамі з некаторымі няцотнымі сімваламі, мой вопрос ... мой сінтаксіс сапраўды няправільна, як паведамленне пра памылку азначае, або мне трэба выкарыстоўваць іншы тып дадзеных, акрамя VARCHAR?

Дзякуй!

0
Два заўвагі, так як вы пачатковец на сайце: 1 пераканайцеся, што вы адзначаеце адказ як правільны/upvoted аднойчы ён дапамог вам! # 2 Вы павінны выдаліць часткі кода, якія не маюць дачынення да разглядаемага пытання. Код добра - незвязаны код дрэнны.
дададзена аўтар slifty, крыніца
Два заўвагі, так як вы пачатковец на сайце: 1 пераканайцеся, што вы адзначаеце адказ як правільны/upvoted аднойчы ён дапамог вам! # 2 Вы павінны выдаліць часткі кода, якія не маюць дачынення да разглядаемага пытання. Код добра - незвязаны код дрэнны.
дададзена аўтар slifty, крыніца

6 адказы

спроба:

$title = mysql_real_escape_string($video['title']['$t']);

каб гарантаваць, што спецыяльныя сімвалы ў назве правільна ўцяклі.

Тым не менш, было б лепш, каб пераўтварыць у Mysqli або PDO і выкарыстоўваць падрыхтаваныя заявы, а не интерполирования радкоў у запытах. Пашырэнне MySQL з'яўляецца састарэлым і не суправаджаецца.

1
дададзена
Дзякуй! Гэта працавала выдатна! І я буду абавязкова глядзець у рабіць гэтыя змены. Дзякуй зноў!
дададзена аўтар Matthew Tuman, крыніца

спроба:

$title = mysql_real_escape_string($video['title']['$t']);

каб гарантаваць, што спецыяльныя сімвалы ў назве правільна ўцяклі.

Тым не менш, было б лепш, каб пераўтварыць у Mysqli або PDO і выкарыстоўваць падрыхтаваныя заявы, а не интерполирования радкоў у запытах. Пашырэнне MySQL з'яўляецца састарэлым і не суправаджаецца.

1
дададзена
Дзякуй! Гэта працавала выдатна! І я буду абавязкова глядзець у рабіць гэтыя змены. Дзякуй зноў!
дададзена аўтар Matthew Tuman, крыніца

спроба:

$title = mysql_real_escape_string($video['title']['$t']);

каб гарантаваць, што спецыяльныя сімвалы ў назве правільна ўцяклі.

Тым не менш, было б лепш, каб пераўтварыць у Mysqli або PDO і выкарыстоўваць падрыхтаваныя заявы, а не интерполирования радкоў у запытах. Пашырэнне MySQL з'яўляецца састарэлым і не суправаджаецца.

1
дададзена
Дзякуй! Гэта працавала выдатна! І я буду абавязкова глядзець у рабіць гэтыя змены. Дзякуй зноў!
дададзена аўтар Matthew Tuman, крыніца

Каб даць крыху больш перадгісторыі да вялікага адказу Barmar у:

Вы ніколі не хочаце, каб ўставіць радок непасрэдна ў запыт у тым, як вы робіце. Памятаеце, што база дадзеных, ultimatly выканання запыту атрымлівае цалкам дазволенае радок. Гэта азначае, што ён не ведае, што гэта зменная, і што было ўручную набраны.

Напрыклад:

$var = "that's not good";
$query = "SELECT * from phrases where phrases.content = '$var'"
echo $query;

выхад будзе:

SELECT * from phrases where phrases.content = 'that's not good'

Звярніце ўвагу на тое, як радок заканчваецца пасля «што», і атрыманы запыт не правільны сінтаксіс.

Я мяркую, што гэта тое, што адбываецца ў вашай сітуацыі, так як назвы схільныя да двукоссі ў іх.

Што mysql_real_escape_string робіць ён скануе радка для спецыяльных знакаў і «выслізгвае іх» (як правіла, шляхам дадання ўжыць зваротны слэш), так што няма ніякага спосабу, ён бы выпадкова зачыніць запыт, які вы пішаце, трымаючы яго бяспечна, якія змяшчаюцца ў двукоссі.


Усё, што вышэй тлумачэнне сапраўды важна ў агульным, калі вы пішаце код для ўстаўкі ў базу дадзеных. Ня sanatizing вашых радкоў правільна з'яўляецца адной з асноўнай праломы ў сістэме бяспекі, і прыводзіць да тыпу атакі, званаму «SQL Injection». Што рабіць, калі адзін з вашых кніг было нешта накшталт « '; карыстальнікаў табліцы падзеньня;»

The plus side is now you can understand this XKCD comic.

1
дададзена
Дзякуй вялікі за тлумачэнне!
дададзена аўтар Matthew Tuman, крыніца

Каб даць крыху больш перадгісторыі да вялікага адказу Barmar у:

Вы ніколі не хочаце, каб ўставіць радок непасрэдна ў запыт у тым, як вы робіце. Памятаеце, што база дадзеных, ultimatly выканання запыту атрымлівае цалкам дазволенае радок. Гэта азначае, што ён не ведае, што гэта зменная, і што было ўручную набраны.

Напрыклад:

$var = "that's not good";
$query = "SELECT * from phrases where phrases.content = '$var'"
echo $query;

выхад будзе:

SELECT * from phrases where phrases.content = 'that's not good'

Звярніце ўвагу на тое, як радок заканчваецца пасля «што», і атрыманы запыт не правільны сінтаксіс.

Я мяркую, што гэта тое, што адбываецца ў вашай сітуацыі, так як назвы схільныя да двукоссі ў іх.

Што mysql_real_escape_string робіць ён скануе радка для спецыяльных знакаў і «выслізгвае іх» (як правіла, шляхам дадання ўжыць зваротны слэш), так што няма ніякага спосабу, ён бы выпадкова зачыніць запыт, які вы пішаце, трымаючы яго бяспечна, якія змяшчаюцца ў двукоссі.


Усё, што вышэй тлумачэнне сапраўды важна ў агульным, калі вы пішаце код для ўстаўкі ў базу дадзеных. Ня sanatizing вашых радкоў правільна з'яўляецца адной з асноўнай праломы ў сістэме бяспекі, і прыводзіць да тыпу атакі, званаму «SQL Injection». Што рабіць, калі адзін з вашых кніг было нешта накшталт « '; карыстальнікаў табліцы падзеньня;»

The plus side is now you can understand this XKCD comic.

1
дададзена
Дзякуй вялікі за тлумачэнне!
дададзена аўтар Matthew Tuman, крыніца

Каб даць крыху больш перадгісторыі да вялікага адказу Barmar у:

Вы ніколі не хочаце, каб ўставіць радок непасрэдна ў запыт у тым, як вы робіце. Памятаеце, што база дадзеных, ultimatly выканання запыту атрымлівае цалкам дазволенае радок. Гэта азначае, што ён не ведае, што гэта зменная, і што было ўручную набраны.

Напрыклад:

$var = "that's not good";
$query = "SELECT * from phrases where phrases.content = '$var'"
echo $query;

выхад будзе:

SELECT * from phrases where phrases.content = 'that's not good'

Звярніце ўвагу на тое, як радок заканчваецца пасля «што», і атрыманы запыт не правільны сінтаксіс.

Я мяркую, што гэта тое, што адбываецца ў вашай сітуацыі, так як назвы схільныя да двукоссі ў іх.

Што mysql_real_escape_string робіць ён скануе радка для спецыяльных знакаў і «выслізгвае іх» (як правіла, шляхам дадання ўжыць зваротны слэш), так што няма ніякага спосабу, ён бы выпадкова зачыніць запыт, які вы пішаце, трымаючы яго бяспечна, якія змяшчаюцца ў двукоссі.


Усё, што вышэй тлумачэнне сапраўды важна ў агульным, калі вы пішаце код для ўстаўкі ў базу дадзеных. Ня sanatizing вашых радкоў правільна з'яўляецца адной з асноўнай праломы ў сістэме бяспекі, і прыводзіць да тыпу атакі, званаму «SQL Injection». Што рабіць, калі адзін з вашых кніг было нешта накшталт « '; карыстальнікаў табліцы падзеньня;»

The plus side is now you can understand this XKCD comic.

1
дададзена
Дзякуй вялікі за тлумачэнне!
дададзена аўтар Matthew Tuman, крыніца