2017-05-30 56 views
-2

我想向我的數據庫中插入一行。我有很多問題。我嘗試了很多方法,但有些錯誤。這是我的嘗試之一:如何在PHP中插入

<?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(); 
} 

?> 

我有這樣的信息: Parse error: syntax error, unexpected '"'

我相信,這種方法彥博效果很好。如果我在"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)是不安全的!瞭解[準備](http://en.wikipedia.org/wiki/Prepared_statement)對於[PDO]的聲明(http://php.net/manual/en/pdo.prepared-statements.php) –

+0

「 $結果'甚至設置? –

+0

如果您使用準備好的語句,則不必擔心連接(當前問題)或引號。 –

回答

2

警告:Little Bobbyyour script is at risk for SQL Injection Attacks.。即使escaping the string也不安全!

瞭解關於PDOprepared聲明使用預準備語句可以防止您擔心連接或引號。


話雖如此,改變

$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

抓好@JonathanKuhn - 我錯過了 –