Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Wstawianie danych do bazy przez PDO


KRZYSZT0FSLENDER

Pytanie

Opublikowano
Cytat

$UserRegQuerryCF = $DBLS->prepare('INSERT INTO 'neartheskylogginsystem' ()');
            $UserRegQuerryCF->execute();

Mam taki skrypt w php i co i gdzie mam wstawić aby jednym query wstawtić do bazy danych jeden rekord o kliku wartościach

Rekomendowane odpowiedzi

Opublikowano

Nie no, jak kolega pisze soft dla Fort Knox i musi byc tajne/poufne to nie mam wiecej pytan!

W takim razie takli kod powinien zadzialac na 113% :P :D

$UserRegQuerryCF = $DBLS->prepare("INSERT INTO `neartheskylogginsystem`
        (
          `id`,
          `kolumna_2`,
          `kolumna_3`,
          `kolumna_4`,
          `kolumna_5`,
          `kolumna_6`,
          `kolumna_7`,
          `kolumna_8`,
          `kolumna_9`,
          `kolumna_10`,
          `kolumna_11`,
          `kolumna_12`
        )
        VALUES
        (
          '{$id}',
          '{$zmienna_2}',
          '{$zmienna_3}',
          '{$zmienna_4}',
          '{$zmienna_5}',
          '{$zmienna_6}',
          '{$zmienna_7}',
          '{$zmienna_8}',
          '{$zmienna_9}',
          '{$zmienna_10}',
          '{$zmienna_11}',
          '{$zmienna_12}'
        )");
$UserRegQuerryCF->execute();

Mala uwaga

Jesli uzywasz jako ogranicznika ciagu tekstowego apostrofu ' i chcesz wewnatrz uzyc tego samego znaku to musisz go poprzedzic znakiem backslash (\).

W kodzie ktory podales

'INSERT INTO 'neartheskylogginsystem' ()'

interpreter odczyta tresc 'INSERT INTO ' a pozniej zwariuje bo nie bedzie wiedzial co zrobic z neartheskylogginsystem' ()'

Twoj kod z zapytania powinien wygladac tak (pomijam poprtawnosc logiczna i uzycie apostrofu zamiast akcentu (`) w nazwie tabeli)

'INSERT INTO \'neartheskylogginsystem\' ()'

lub z uzyciem cudzyslowu (")

"INSERT INTO 'neartheskylogginsystem' ()"

 

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano
:BaseRank,

oznaczalo by, ze bedzie kolejny parametr, a tu niespodzianka bo nie bedzie :P

Usun ten przecinek i powinno zagrac

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano
Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 in C:\xampp\htdocs\RegisterConfirm.php:219 Stack trace: #0 C:\xampp\htdocs\RegisterConfirm.php(219): PDO->prepare('\r\n INSER...') #1 {main} thrown in C:\xampp\htdocs\RegisterConfirm.php on line 219

takie cos mam a linia 219 to jest $DBLS->prepare('
        INSERT INTO NearTheSkyLoginSystem 
        (
            UserName,
            UserEmail,
            UserRegisteredEmail,
            UserPassword,
            UserLoginCode,
            UserRegisteredLoginCode,
            UserRecoveryCode,
            UserRank
        )VALUES(
            :UserNick,
            :UserEmail,
            :HashedPass,
            :UserEmail,
            :LoginCode,
            :UserLoginCode,
            :UserLoginCode,
            :UserRecoveryCode,
            :BaseRank
        )');

 

Opublikowano
1 minutę temu, KRZYSZT0FSLENDER napisał:

Insert value list does not match column list

Wysil sie troche, bo ile mozna wpisywac za Ciebie w google ... chociazby w translate. Nawet proste tlumaczenie wyjasnia chyba wszystko

Wstawianie listy wartości nie pasuje do listy kolumn

Policz ile masz nazw kolumn w INSERT a ile wstawiasz wartosci

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano
9 minutes ago, KRZYSZT0FSLENDER said:

Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 in C:\xampp\htdocs\RegisterConfirm.php:219 Stack trace: #0 C:\xampp\htdocs\RegisterConfirm.php(219): PDO->prepare('\r\n INSER...') #1 {main} thrown in C:\xampp\htdocs\RegisterConfirm.php on line 219

takie cos mam a linia 219 to jest $DBLS->prepare('
        INSERT INTO NearTheSkyLoginSystem 
        (
            UserName,
            UserEmail,
            UserRegisteredEmail,
            UserPassword,
            UserLoginCode,
            UserRegisteredLoginCode,
            UserRecoveryCode,
            UserRank
        )VALUES(
            :UserNick,
            :UserEmail,
            :HashedPass,
            :UserEmail,
            :LoginCode,
            :UserLoginCode,
            :UserLoginCode,
            :UserRecoveryCode,
            :BaseRank
        )');

Kolego gdy zaczynasz wprowadzać jakiekolwiek zmiany, używaj mózgu proszę. Zmieniasz bezmyślnie rzeczy w skrypcie i biegniesz na forum a błąd aż razi w oczy. 

 

$UserRegConfirm = $DBLS->prepare('INSERT INTO neartheskylogginsystem 
        (
            UserName,
            UserEmail,
            UserPassword,
            UserRegisteredEmail,
            LoginCode,
            UserLoginCode,
            UserRecoveryCode,
            UserRank
        )VALUES(
            :UserNick,
            :UserEmail,
            :HashedPass,
            :UserEmailReg,
            :LoginCode,
            :UserLoginCode,
            :UserRecoveryCode,
            :BaseRank
        )
        ');
        $UserRegConfirm->bindValue(':UserNick',$_SESSION['Gived_name'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':UserEmail',$_SESSION['Gived_CEmail'], PDO::PARAM_STR);
	    $UserRegConfirm->bindValue(':UserEmailReg',$_SESSION['Gived_CEmail'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':HashedPass',$HashedPass, PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':LoginCode',$_SESSION['Gived_Logincode'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':UserLoginCode',$_SESSION['Gived_Logincode'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':UserRecoveryCode',$_SESSION['Gived_Recoverycode'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':BaseRank',$PlayerRank, PDO::PARAM_STR);
        $UserRegConfirm->execute();

 

Tyle pomocy ode mnie, następnym razem radź sobie sam bo tak proste błędy ogarnie nawet ktoś kto nie ma zielonego pojęcia o tym co próbuje zrobić.

 

Opublikowano
7 godzin temu, slepiec68 napisał:

:BaseRank,

oznaczalo by, ze bedzie kolejny parametr, a tu niespodzianka bo nie bedzie :P

Usun ten przecinek i powinno zagrac

usunąłem ten przecinek i coś takiego 

Cytat

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdocs\RegisterConfirm.php:250 Stack trace: #0 C:\xampp\htdocs\RegisterConfirm.php(250): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\RegisterConfirm.php on line 250

 

Opublikowano

I z Ciekawości pytając, wyczarować zawartość lini 250 mamy czy zechcesz wstawić KOD

Opublikowano

Tym razem niech bedzie usprwiedliwiony - dotyczy podanego kodu a w bledzie jest (tylko czemu czarne na prawie czarnym? :)

PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\RegisterConfirm.php on line 250

Znalazlem takie cos:

You cannot use a named parameter marker of the same name twice in a prepared statement.

Zobacz tak:

$UserRegConfirm = $DBLS->prepare('
INSERT INTO neartheskylogginsystem 
(
    UserName,
    UserEmail,
    UserPassword,
    UserRegisteredEmail,
    LoginCode,
    UserLoginCode,
    UserRecoveryCode,
    UserRank
)VALUES(
    :UserNick,
    :UserEmail,
    :HashedPass,
    :UserEmail,
    :LoginCode,
    :UserLoginCode,
    :UserRecoveryCode,
    :BaseRank
)');
$UserRegConfirm->bindValue(':UserNick', $_SESSION['Gived_name'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserEmail', $_SESSION['Gived_CEmail'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':HashedPass', $HashedPass, PDO::PARAM_STR);
$UserRegConfirm->bindValue(':LoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserLoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserRecoveryCode', $_SESSION['Gived_Recoverycode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':BaseRank', $PlayerRank, PDO::PARAM_STR);
$UserRegConfirm->execute();

 

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano
Cytat

$BaseRank = "Gracz";
    if($UserAlive==false){
        $Data = [
            'UserNick' => $_SESSION['Gived_name'],
            'UserEmail' => $_SESSION['Gived_CEmail'],
            'UserRegEmail' => $_SESSION['Gived_CEmail'],
            'HashedPass' => $HashedPass,
            'LoginCode' => $_SESSION['Gived_Logincode'],
            'UserLoginCode' => $_SESSION['Gived_Logincode'],
            'UserRecoveryCode' => $_SESSION['Gived_Recoverycode'],
            'BaseRank' => $BaseRank
        ];
        $Task = "
        INSERT INTO NearTheSkyLoginSystem 
        (
            UserName,
            UserEmail,
            UserRegisteredEmail,
            UserPassword,
            UserLoginCode,
            UserRegisteredLoginCode,
            UserRecoveryCode,
            UserRank
        )VALUES(
            :UserNick,
            :UserEmail,
            :UserRegEmail,
            :HashedPass,
            :LoginCode,
            :UserLoginCode,
            :UserRecoveryCode,
            :BaseRank
        )";
        $UserRegConfirm = $DBLS->prepare($Task);

Okazało się że to się robi w taki sposób a nie bind value. 

Opublikowano

Obie formy są poprawne, w preparowanym zapytaniu nie możesz po postu używać dwóch takich samych placeholderów.

Opublikowano
4 godziny temu, slepiec68 napisał:

Tym razem niech bedzie usprwiedliwiony - dotyczy podanego kodu a w bledzie jest (tylko czemu czarne na prawie czarnym? :)


PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\RegisterConfirm.php on line 250

Znalazlem takie cos:


You cannot use a named parameter marker of the same name twice in a prepared statement.

Zobacz tak:


$UserRegConfirm = $DBLS->prepare('
INSERT INTO neartheskylogginsystem 
(
    UserName,
    UserEmail,
    UserPassword,
    UserRegisteredEmail,
    LoginCode,
    UserLoginCode,
    UserRecoveryCode,
    UserRank
)VALUES(
    :UserNick,
    :UserEmail,
    :HashedPass,
    :UserEmail,
    :LoginCode,
    :UserLoginCode,
    :UserRecoveryCode,
    :BaseRank
)');
$UserRegConfirm->bindValue(':UserNick', $_SESSION['Gived_name'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserEmail', $_SESSION['Gived_CEmail'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':HashedPass', $HashedPass, PDO::PARAM_STR);
$UserRegConfirm->bindValue(':LoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserLoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserRecoveryCode', $_SESSION['Gived_Recoverycode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':BaseRank', $PlayerRank, PDO::PARAM_STR);
$UserRegConfirm->execute();

 

To twoje wywala 

Cytat

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdocs\RegisterConfirm.php:250 Stack trace: #0 C:\xampp\htdocs\RegisterConfirm.php(250): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\RegisterConfirm.php on line 250

250 linia $UserRegConfirm->execute();

 

Opublikowano

Pokusilem sie i sprawdzilem. Zalozylem tablice w/g zapytania, polaczylem sie do bazy, wykonalem zapytanie z parametrami i .... SOA#1 "A u mnie dziala" :P

kod:

<?php

include ('db.php');

$_SESSION['Gived_name'] = 'Stefan';
$_SESSION['Gived_CEmail'] = '[email protected]';
$HashedPass = md5('dupa.romana');
$_SESSION['Gived_Logincode'] = 'jakis login kod';
$_SESSION['Gived_Recoverycode'] = 'jakis kod odzyskiwania';
$PlayerRank = 666;

$UserRegConfirm = $DBLS->prepare('
INSERT INTO neartheskylogginsystem 
(
    UserName,
    UserEmail,
    UserPassword,
    UserRegisteredEmail,
    LoginCode,
    UserLoginCode,
    UserRecoveryCode,
    UserRank
)VALUES(
    :UserNick,
    :UserEmail,
    :HashedPass,
    :UserEmail,
    :LoginCode,
    :UserLoginCode,
    :UserRecoveryCode,
    :BaseRank
)');
$UserRegConfirm->bindValue(':UserNick', $_SESSION['Gived_name'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserEmail', $_SESSION['Gived_CEmail'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':HashedPass', $HashedPass, PDO::PARAM_STR);
$UserRegConfirm->bindValue(':LoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserLoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserRecoveryCode', $_SESSION['Gived_Recoverycode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':BaseRank', $PlayerRank, PDO::PARAM_STR);
$UserRegConfirm->execute();

?>

screen

Problem nie lezy po stronie kodu

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

Struktura dopasowana i nadal to samo -> SOA#1

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

Jest lepiej, jest kod, ale jeszcze troche drogi przed nami :)

Zeby Ci dac odpowiedz potrzebne sa tym razem:

- nazwy kolumn w tablicy neartheskylogginsystem,

- oraz nazwy kluczy $_POST (bo zakladam ze przez $_POST przekazujesz wartosci z formularza).

Po uzupelnieniu brakujacych danych otrzymasz wyczerpujaca odpowiedz :)

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

 

15 hours ago, slepiec68 said:

Pokusilem sie i sprawdzilem. Zalozylem tablice w/g zapytania, polaczylem sie do bazy, wykonalem zapytanie z parametrami i .... SOA#1 "A u mnie dziala" :P

kod:


<?php

include ('db.php');

$_SESSION['Gived_name'] = 'Stefan';
$_SESSION['Gived_CEmail'] = '[email protected]';
$HashedPass = md5('dupa.romana');
$_SESSION['Gived_Logincode'] = 'jakis login kod';
$_SESSION['Gived_Recoverycode'] = 'jakis kod odzyskiwania';
$PlayerRank = 666;

$UserRegConfirm = $DBLS->prepare('
INSERT INTO neartheskylogginsystem 
(
    UserName,
    UserEmail,
    UserPassword,
    UserRegisteredEmail,
    LoginCode,
    UserLoginCode,
    UserRecoveryCode,
    UserRank
)VALUES(
    :UserNick,
    :UserEmail,
    :HashedPass,
    :UserEmail,
    :LoginCode,
    :UserLoginCode,
    :UserRecoveryCode,
    :BaseRank
)');
$UserRegConfirm->bindValue(':UserNick', $_SESSION['Gived_name'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserEmail', $_SESSION['Gived_CEmail'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':HashedPass', $HashedPass, PDO::PARAM_STR);
$UserRegConfirm->bindValue(':LoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserLoginCode', $_SESSION['Gived_Logincode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':UserRecoveryCode', $_SESSION['Gived_Recoverycode'], PDO::PARAM_STR);
$UserRegConfirm->bindValue(':BaseRank', $PlayerRank, PDO::PARAM_STR);
$UserRegConfirm->execute();

?>

screen

Problem nie lezy po stronie kodu

Właściwie to leży, nie można używać dwukrotnie tych samych placeholderów jeśli nie ma array'a bądź emulation mode nie jest włączone.

 

Opublikowano

@Nightmare'

2 placeholdery byly takie same w poczatkowym kodzie od @KRZYSZT0FSLENDER i napisalem mu o tym kilka postow wyzej

bylo:

:LoginCode,
:LoginCode,

zmienilem na

:LoginCode,
:UserLoginCode,

Kod, ktory podalem dziala na defaultowo ustawionym WebServ 2.1, bez wlaczonej emulacji, a gdyby byla wlaczona to kod by dzialal, niezaleznie od nazw placeholderow

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Opublikowano

@slepiec68 

Cytat

$UserRegConfirm = $DBLS->prepare('INSERT INTO neartheskylogginsystem 
        (
            UserName,
            UserEmail,
            UserPassword,
            UserRegisteredEmail,
            LoginCode,
            UserLoginCode,
            UserRecoveryCode,
            UserRank
        )VALUES(
            :UserNick,
            :UserEmail,
            :HashedPass,
            :UserEmail,
            :LoginCode,
            :LoginCode,
            :UserRecoveryCode,
            :BaseRank,
        )
        ');
        $UserRegConfirm->bindValue(':UserNick',$_SESSION['Gived_name'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':UserEmail',$_SESSION['Gived_CEmail'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':HashedPass',$HashedPass, PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':LoginCode',$_SESSION['Gived_Logincode'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':UserRecoveryCode',$_SESSION['Gived_Recoverycode'], PDO::PARAM_STR);
        $UserRegConfirm->bindValue(':BaseRank',$PlayerRank, PDO::PARAM_STR);
        $UserRegConfirm->execute();

Mam taki kod i wywala mi błąd pomożesz mi go naprawić czy on jest poprawny co do szczegółów php 7.2 html 5

Edit:

Czy jak mam pustą zmienną to czy muszę to podawać w zapytaniu czy to jest zbędne

Opublikowano

@Nightmare'

Faktycznie, ale nicka mam nie od parady :D

Dobrze, ze jakies mlodsze oczy kontroluja :P

Lepiej jest nie odzywać się wcale i pozwolić ludziom myśleć, że jesteś glupi, niż odezwać się i rozwiać wszelkie wątpliwości.
Mark Twain

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...