如何在PHP中插入INTO

时间:2017-05-30 21:16:24

标签: php mysql pdo

我想在我的数据库中插入一行。我有很多问题。我尝试了很多方法,但有些不对劲。这是我的一次尝试:

<?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 '"'

我确信,该​​方法_POST运行良好。如果我在'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 个答案:

答案 0 :(得分:2)

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

了解prepared PDO语句使用预准备语句可以防止您不必担心连接或引号。

话虽如此,改变

$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(),因为您不需要它。要执行查询,您将使用execute()

$wynik->execute();