2017-05-30 9 views
-2

私のデータベースに行を挿入したいと思います。私には多くの問題があります。私はたくさんの方法を試しましたが、何かが間違っています。それは私の試みの一つである: Parse error: syntax error, unexpected '"'PHPで挿入する方法

私は確信しているが、その方法の_POSTがうまく機能:

<?php 
$imie = $_POST['imie']; 
$nazwisko = $_POST['nazwisko']; 
$plec = $_POST['plec']; 
$adres = $_POST['adres']; 
$miasto = $_POST['miasto']; 
$rok = $_POST['rok']; 

try 
{ 
    $db = new PDO('mysql:host=localhost;dbname=baza_krwiodawstwa; charset=utf8','root',''); 
    $wynik = $db->query('INSERT INTO `dane_osobowe` (`id`,`imie`,`nazwisko`, `plec`, `ulica`, `miejscowosc`, `rok_urodzenia`) VALUES (NULL, '".$imie."', '".$nazwisko."', '".$plec."', '".$adres."', '".$miasto."', '".$rok."')'); 
    $wynik->closecursor(); 
} 
catch(PDOException $e) 
{ 
    print "Błąd połączenia z bazą!: ".$e->getMessage()."<br/>"; 
    die(); 
} 

?> 

私はこの情報を持っています。私は"INSERT INTO..."'INSERT INTO...'を変更した場合、私はこれらのメッセージを得る:

Fatal error: Call to a member function closeCursor() on boolean in C:\wamp64\www\projektformularz22.php on line 13 

私の第二の方法でも動作しません:

$db = mysqli_connect('localhost','root','') or die(mysqli_error($db)); 
mysqli_select_db($db,'baza_krwiodawstwa'); 
mysqli_set_charset($db,'utf8'); 
$wynik = mysqli_query($db, "INSERT INTO `dane_osobowe` (`id`,`imie`, `nazwisko`, `plec`, `ulica`, `miejscowosc`, `rok_urodzenia`) VALUES (NULL, '$imie', '$nazwisko', '$plec', '$adres', '$miasto', '$rok')"); 

if($wynik === true) 
{ 
    echo "Wstawionych rekordów: ".mysqli_affected_rows($db); 
} 
else 
    echo "Błąd!"; 
mysqli_close($db); 
+1

[リトルボビー](http://bobby-tables.com/)と言う*** [スクリプトがSQLインジェクション攻撃のリスクがある。](のhttp:/ /stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)***。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! [PDO](http://php.net/manual/en/pdo.prepared-statements.php)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学ぶ –

+0

ここで ' $ result'は設定されますか? –

+0

プリペアドステートメントを使用する場合は、連結(現在の問題)や引用符を心配する必要はありません。 –

答えて

2

警告:Little Bobbyyour script is at risk for SQL Injection Attacks.を言います。でもescaping the stringは安全ではありません!

PDOについてのpreparedステートメントについて準備済みステートメントを使用すると、連結や引用符を心配する必要がなくなります。


クエリからすべての二重引用符と連結を外し、二重引用符で全体のクエリ文字列を囲むようにしてください

$wynik = $db->query("INSERT INTO `dane_osobowe` (`id`,`imie`,`nazwisko`, `plec`, `ulica`, `miejscowosc`, `rok_urodzenia`) VALUES (NULL, '$imie', '$nazwisko', '$plec', '$adres', '$miasto', '$rok')"); 

$wynik = $db->query('INSERT INTO `dane_osobowe` (`id`,`imie`,`nazwisko`, `plec`, `ulica`, `miejscowosc`, `rok_urodzenia`) VALUES (NULL, '".$imie."', '".$nazwisko."', '".$plec."', '".$adres."', '".$miasto."', '".$rok."')'); 

を変更する、と述べました。

closeCursor()は使用しないでください。あなたが使用するクエリを実行するために​​

$wynik->execute(); 
+1

また、一重引用符で開始されても二重引用符で囲んでコンテキストを終了しようとするため、クエリの開始引用符を二重引用符に変更する必要があります。 –

+0

良いキャッチ@ジョナサンクーン - 私はそれを逃した –

関連する問題