Nima uchun men ushbu MySQL sintaksisi xatoni (PHP PDO) (MySQL)

MySQL ma'lumotlar bazasiga sodda qo'shimchani bajarishga harakat qilaman, lekin bu sintaksik xatoni olaman:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access
violation: 1064 You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'Combined Authority - ICT Service Desk Technician (WYCA 53) ' at line 2

Nima uchun?

So'rov:

$conn->exec("INSERT INTO jobs (jobname, category, contract, link)
SELECT * FROM (" . $name[$i] . "," .  $category[$i] . "," . $contract[$i] 
. "," . $link[$i] . ") AS tmp
WHERE NOT EXISTS (
SELECT link FROM jobs WHERE link = '" . " " . $link[$i] . ") LIMIT 1;"); 

$ sql bosildi:

INSERT INTO jobs (jobname, category, contract, link) SELECT * FROM ( West
Yorkshire Combined Authority - ICT Service Desk Technician (WYCA 53)
Details ,' Other ',' Other
','https://bradford.engageats.co.uk/ViewVacancyV2.aspx?
enc=mEgrBL4XQK0+ld8aNkwYmF3VpPuSfX9mpz94c96U/BBgu1IZbwnQ0d+smFL6YrlPhdWkSGi559WmVou+xCXKsYHbHKP0EyHRCwf+vYTu8aYRJbtJgz78Wm2KQgu+LktushGT2Rg0PHjiRMA2Xyn4gw==') AS tmp WHERE NOT EXISTS ( SELECT link FROM jobs WHERE link ='https://bradford.engageats.co.uk/ViewVacancyV2.aspx?enc=mEgrBL4XQK0+ld8aNkwYmF3VpPuSfX9mpz94c96U/BBgu1IZbwnQ0d+smFL6YrlPhdWkSGi559WmVou+xCXKsYHbHKP0EyHRCwf+vYTu8aYRJbtJgz78Wm2KQgu+LktushGT2Rg0PHjiRMA2Xyn4gw==') LIMIT 1;

Yuqorida ko'rsatilgan past formatlash uchun uzr so'raymiz. Iltimos, uni yaxshiroq ko'rish uchun nusxa ko'chiring va matn muharririga o'tkazing.

EDIT:

Ajabo, bu so'rov qo'g'irchoq qadriyatlar bilan ishlaydi, ammo u hali ham massivlar uchun ishlamaydi

INSERT INTO jobs (jobname, category, contract, link)
SELECT * FROM (SELECT 'Test', 'Test2',
'Test3','https://bradford.engageats.co.uk/ViewVacancyV2.aspx?
enc=mEgrBL4XQK0+ld8aNkwYmEUlxXraCLcDtY5P6rS92ks+pMDnlWa9QO6M/Df/HLticzgbgVWV
YayJj+zNDXalJnejkDY/4/gH0pIF9KyvMFXjn0u0quGSUzf4M/Gh0wF0MqIRgwLERFf+xXj6lw4s
tQ==') AS tmp
WHERE NOT EXISTS (
SELECT link FROM jobs WHERE link = 'https://bradford.engageats.co.uk/ViewVacancyV2.aspx?enc=mEgrBL4XQK0+ld8aNkwYmEUlxXraCLcDtY5P6rS92ks+pMDnlWa9QO6M/Df/HLticzgbgVWVYayJj+zNDXalJnejkDY/4/gH0pIF9KyvMFXjn0u0quGSUzf4M/Gh0wF0MqIRgwLERFf+xXj6lw4stQ=='
) LIMIT 1;
0
Iltimos, yaratilgan so'rovni ko'rsating. $ conn-> exec ($ sql = " va keyinroq print $ sql; ) va bu erda ko'rsatilsin.
qo'shib qo'ydi muallif JustOnUnderMillions, manba
Iltimos, yaratilgan so'rovni ko'rsating. $ conn-> exec ($ sql = " va keyinroq print $ sql; ) va bu erda ko'rsatilsin.
qo'shib qo'ydi muallif JustOnUnderMillions, manba
Bu sohada: link = '"." "$. $ [$ I].") LIMIT 1 bu erda ham bo'sh joy qo'shilgan. Agar bundan sql qilsam, u quyidagi kabi ko'rinadi: link = 'linkvalue) but link =' linkvalue 'bo'lishi kerak) LIMIT 1
qo'shib qo'ydi muallif JustOnUnderMillions, manba
Bu sohada: link = '"." "$. $ [$ I].") LIMIT 1 bu erda ham bo'sh joy qo'shilgan. Agar bundan sql qilsam, u quyidagi kabi ko'rinadi: link = 'linkvalue) but link =' linkvalue 'bo'lishi kerak) LIMIT 1
qo'shib qo'ydi muallif JustOnUnderMillions, manba
Siz bir ' kodini yo'qotib qo'yasiz. Va nima sababdan ulanishning qiymatidan oldin bir joyni qo'shasiz?
qo'shib qo'ydi muallif JustOnUnderMillions, manba
Siz bir ' kodini yo'qotib qo'yasiz. Va nima sababdan ulanishning qiymatidan oldin bir joyni qo'shasiz?
qo'shib qo'ydi muallif JustOnUnderMillions, manba
So'rovni baham ko'ring
qo'shib qo'ydi muallif imsome1, manba
So'rovni baham ko'ring
qo'shib qo'ydi muallif imsome1, manba
@JustOnUnderMillions Xatolarni ko'rsatganingiz uchun tashakkur, lekin men hali ham bir xil xatoga yo'l qo'ymayapman. Buning bilan bog'liq muammolar mavjud: 'Kombine hokimiyat - AKT xizmat ko'rsatish bo'yicha mutaxassis (WYCA 53)'
qo'shib qo'ydi muallif DragonMasa, manba
Menimcha, bu kabi kalit so'z yordamida tuzatishga qodir bo'laman, ammo bu so'rovdan FROM kalit so'zidan keyin qanday foydalansam bo'ladi?
qo'shib qo'ydi muallif DragonMasa, manba
Menimcha, bu kabi kalit so'z yordamida tuzatishga qodir bo'laman, ammo bu so'rovdan FROM kalit so'zidan keyin qanday foydalansam bo'ladi?
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions Qaerda bir ' etishmayotgan?
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions Qaerda bir ' etishmayotgan?
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions Xatolarni ko'rsatganingiz uchun tashakkur, lekin men hali ham bir xil xatoga yo'l qo'ymayapman. Buning bilan bog'liq muammolar mavjud: 'Kombine hokimiyat - AKT xizmat ko'rsatish bo'yicha mutaxassis (WYCA 53)'
qo'shib qo'ydi muallif DragonMasa, manba
1 daqiqalik. Endi qo'shing
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions O'zgartirishimda $ sql qo'shildi
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions O'zgartirishimda $ sql qo'shildi
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions O'zgartirishimda $ sql qo'shildi
qo'shib qo'ydi muallif DragonMasa, manba
1 daqiqalik. Endi qo'shing
qo'shib qo'ydi muallif DragonMasa, manba
1 daqiqalik. Endi qo'shing
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions So'rov hali ham barcha takliflardan keyin ham ishlamaydi.
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions So'rov hali ham barcha takliflardan keyin ham ishlamaydi.
qo'shib qo'ydi muallif DragonMasa, manba
@JustOnUnderMillions So'rov hali ham barcha takliflardan keyin ham ishlamaydi.
qo'shib qo'ydi muallif DragonMasa, manba

7 javoblar

ushbu tanlangan so'rovni sinab ko'ring va boshqa o'zgaruvchilar bilan bir xilda bajaring:

SELECT * FROM ("'".$name[$i]."','".$category[$i]."', '".$contract[$i] ."', '". $link[$i] ."'") AS tmp
1
qo'shib qo'ydi
oddiy sintaksik xato savollari off topic.V. siz absurd bo'lgan string concat dan foydalanayapsiz. ayniqsa, PDO foydalanayotganingizda
qo'shib qo'ydi muallif e4c5, manba
Iltimos, ushbu javobning birinchi sharhini diqqat bilan o'qing.
qo'shib qo'ydi muallif e4c5, manba
@ e4c5 Menga nima uchun bu befoydaligini aytib bering. Siz nafaqat bema'nilik deb aytsangiz, hissa qo'shmaysiz
qo'shib qo'ydi muallif DragonMasa, manba
@ E4c5 Nima uchun mening savolim noto'g'ri ekanligini ayting
qo'shib qo'ydi muallif DragonMasa, manba

ushbu tanlangan so'rovni sinab ko'ring va boshqa o'zgaruvchilar bilan bir xilda bajaring:

SELECT * FROM ("'".$name[$i]."','".$category[$i]."', '".$contract[$i] ."', '". $link[$i] ."'") AS tmp
1
qo'shib qo'ydi
oddiy sintaksik xato savollari off topic.V. siz absurd bo'lgan string concat dan foydalanayapsiz. ayniqsa, PDO foydalanayotganingizda
qo'shib qo'ydi muallif e4c5, manba
Iltimos, ushbu javobning birinchi sharhini diqqat bilan o'qing.
qo'shib qo'ydi muallif e4c5, manba
@ e4c5 Menga nima uchun bu befoydaligini aytib bering. Siz nafaqat bema'nilik deb aytsangiz, hissa qo'shmaysiz
qo'shib qo'ydi muallif DragonMasa, manba
@ E4c5 Nima uchun mening savolim noto'g'ri ekanligini ayting
qo'shib qo'ydi muallif DragonMasa, manba

ushbu tanlangan so'rovni sinab ko'ring va boshqa o'zgaruvchilar bilan bir xilda bajaring:

SELECT * FROM ("'".$name[$i]."','".$category[$i]."', '".$contract[$i] ."', '". $link[$i] ."'") AS tmp
1
qo'shib qo'ydi
oddiy sintaksik xato savollari off topic.V. siz absurd bo'lgan string concat dan foydalanayapsiz. ayniqsa, PDO foydalanayotganingizda
qo'shib qo'ydi muallif e4c5, manba
Iltimos, ushbu javobning birinchi sharhini diqqat bilan o'qing.
qo'shib qo'ydi muallif e4c5, manba
@ e4c5 Menga nima uchun bu befoydaligini aytib bering. Siz nafaqat bema'nilik deb aytsangiz, hissa qo'shmaysiz
qo'shib qo'ydi muallif DragonMasa, manba
@ E4c5 Nima uchun mening savolim noto'g'ri ekanligini ayting
qo'shib qo'ydi muallif DragonMasa, manba

Men uch xil muammolarni uchratishim mumkin:

  • First of all, you are inventing your own SQL syntax and the server is not amused. You cannot SELECT * FROM (anything you want). You can only select from tables, views or subqueries.

  • Secondly, when you type e.g. foo in SQL the database engine needs a way to figure out if you mean a table or column or you mean literal word. The method used is single quotes:

    SELECT foo AS this_is_a_column, 'foo' AS this_is_a_value
    FROM bar
    

    You can find more details at What is the difference between an identifier and a literal?

  • Last but not least, your overall use of the PDO extension is wrong. PDO provides a way to separate code and data but you are not using it. Rather than this:

    $conn->exec("SELECT link FROM jobs WHERE link = '" . " " . $link[$i] . ") LIMIT 1;"); 
    

    ... you should be doing something like this:

    $stmt = $conn->prepared("SELECT link FROM jobs WHERE link=? LIMIT 1"); 
    $stmt->execute($stmt, array($link[$i])); 
    
0
qo'shib qo'ydi
Agar u ishlamasa, u erda noto'g'ri narsa bo'lishi kerak. Uni tuzatishga harakat qiling.
qo'shib qo'ydi muallif Álvaro González, manba
Ikkinchi so'rovlar sintaksikni tuzatganligi uchun kam SELECT qo'shimchalar?
qo'shib qo'ydi muallif Álvaro González, manba
Xo'sh, SELECT * FROM (G'arbiy Yorkshire Birlashgan Kombinati - AKT Xizmat ko'rsatish Maslahatchisi ...) aniq emas.
qo'shib qo'ydi muallif Álvaro González, manba
SELECT ni qo'shdim. Hali ham ishlamayapti :(
qo'shib qo'ydi muallif DragonMasa, manba
Xo'sh, nima uchun u yangi tahrirlangan so'rovlar bilan ishlaydi, aslida emas?
qo'shib qo'ydi muallif DragonMasa, manba
Tahririmga qarang. O'z sintaksimni ixtiro qilmadim. Men buni shu tarzda qilsam yaxshi bo'ladi, lekin massivlar bilan emas.
qo'shib qo'ydi muallif DragonMasa, manba
So'rovni ishlatilmaganda, u kutilganidek ishlaydi. :) (Agar qo'g'irchoqbozlik qiymatlari bilan foydalansam) Mening gumonim, qator elementlari ichidagi sintaksikning to'g'ri yozilgan emasligidir. Bundan tashqari, uchi uchun rahmat
qo'shib qo'ydi muallif DragonMasa, manba

Men uch xil muammolarni uchratishim mumkin:

  • First of all, you are inventing your own SQL syntax and the server is not amused. You cannot SELECT * FROM (anything you want). You can only select from tables, views or subqueries.

  • Secondly, when you type e.g. foo in SQL the database engine needs a way to figure out if you mean a table or column or you mean literal word. The method used is single quotes:

    SELECT foo AS this_is_a_column, 'foo' AS this_is_a_value
    FROM bar
    

    You can find more details at What is the difference between an identifier and a literal?

  • Last but not least, your overall use of the PDO extension is wrong. PDO provides a way to separate code and data but you are not using it. Rather than this:

    $conn->exec("SELECT link FROM jobs WHERE link = '" . " " . $link[$i] . ") LIMIT 1;"); 
    

    ... you should be doing something like this:

    $stmt = $conn->prepared("SELECT link FROM jobs WHERE link=? LIMIT 1"); 
    $stmt->execute($stmt, array($link[$i])); 
    
0
qo'shib qo'ydi
Agar u ishlamasa, u erda noto'g'ri narsa bo'lishi kerak. Uni tuzatishga harakat qiling.
qo'shib qo'ydi muallif Álvaro González, manba
Ikkinchi so'rovlar sintaksikni tuzatganligi uchun kam SELECT qo'shimchalar?
qo'shib qo'ydi muallif Álvaro González, manba
Xo'sh, SELECT * FROM (G'arbiy Yorkshire Birlashgan Kombinati - AKT Xizmat ko'rsatish Maslahatchisi ...) aniq emas.
qo'shib qo'ydi muallif Álvaro González, manba
SELECT ni qo'shdim. Hali ham ishlamayapti :(
qo'shib qo'ydi muallif DragonMasa, manba
Xo'sh, nima uchun u yangi tahrirlangan so'rovlar bilan ishlaydi, aslida emas?
qo'shib qo'ydi muallif DragonMasa, manba
Tahririmga qarang. O'z sintaksimni ixtiro qilmadim. Men buni shu tarzda qilsam yaxshi bo'ladi, lekin massivlar bilan emas.
qo'shib qo'ydi muallif DragonMasa, manba
So'rovni ishlatilmaganda, u kutilganidek ishlaydi. :) (Agar qo'g'irchoqbozlik qiymatlari bilan foydalansam) Mening gumonim, qator elementlari ichidagi sintaksikning to'g'ri yozilgan emasligidir. Bundan tashqari, uchi uchun rahmat
qo'shib qo'ydi muallif DragonMasa, manba

Jihozlar uchun tirnoqlardan foydalaning ustunlar va jadvallar nomlari uchun backticks.

For more reference Check: http://php.net/manual/en/pdo.errorinfo.php

0
qo'shib qo'ydi

Jihozlar uchun tirnoqlardan foydalaning ustunlar va jadvallar nomlari uchun backticks.

For more reference Check: http://php.net/manual/en/pdo.errorinfo.php

0
qo'shib qo'ydi
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin