PHP ve MySQL sorun

5 Cevap php

Ben sorun bu görünüşte basit MySQL sorgu iş yapma yaşıyorum. Herkes sorun nokta miyim?

<?php
include "config.php";

$offerid = $_POST["offerid"];
$ip = $_SERVER["REMOTE_ADDR"];

mysql_query("INSERT INTO voted (offerid,ip) VALUES (".$offerid.",".$ip.")");
?>

5 Cevap

Sorgu içine bir dize değeri yerleştirmek için, bunu 2 eylemleri gerçekleştirmeniz gerekir:

  • tırnak içine

  • ve özel karakterler kaçış.

Yani, sorgu bu gibi olmalı:

INSERT INTO voted (text) VALUES ('I\'m a programmer')

Bu bilgi ile donanmış, kolayca geçerli bir sorgu yapmak için bir kod yazabilirsiniz:

$offerid = mysql_real_escape_string($_POST["offerid"]);
$ip = mysql_real_escape_string($_SERVER["REMOTE_ADDR"]);

$sql = "INSERT INTO voted (offerid,ip) VALUES ('$offerid','$ip')"
mysql_query($sql) or trigger_error(mysql_error().$sql);

Note the trigger_error part.
It will provide you with comprehensive information on any error

benim tahminim tırnak ile olacak

mysql_query("INSERT INTO voted (offerid,ip) VALUES (\"".$offerid."\",\"".$ip."\")");
<?php
include "config.php";

$offerid = $_POST["offerid"];
$ip = $_SERVER["REMOTE_ADDR"];

mysql_query("INSERT INTO voted (offerid,ip) VALUES ('".mysql_real_escape_string  ($offerid)."','".mysql_real_escape_string  ($ip)."')");
?>

Kaçacaktır yanı sıra mysql_real_escape_string php fonksiyonu (Infront ters eğik çizgi ekleyin) herhangi bir güvenlik riski karakter - Bu tek Eklediğiniz dizelerini tırnak işaretleri ekler.

intval(...) ve mysql_real_escape_string(...) Eğer PEAR::DB veya PEAR::MDB2 ile parameterized statements (veya tutucular) kullanabilirsiniz kullanılarak ek olarak:

$dsn = "mysqli://testuser:testpass@localhost/test";
$conn =& DB::connect ($dsn); // using PEAR::DB, though it's been superseded
if (DB::isError ($conn)) {
    die ("Cannot connect: " . $conn->getMessage () . "\n");
}

$result =& $conn->query ("INSERT INTO voted (offerid,ip) VALUES (?,?)", array($_POST["offerid"], $_SERVER["REMOTE_ADDR"]));
if (DB::isError ($result)) {
    die ("INSERT failed: " . $result->getMessage () . "\n");
}

Tutucuları ve parametreleri kullanarak PHP dışındaki platformlarda oldukça yaygın olduğunu, bu nedenle arkalarında temel dayanak anlamak için kötü bir fikir değil.

Bu gibi DB modüllerini kullanarak ilgileniyorsanız, ben Paul Dubois tarafından Writing Scripts with PHP's PEAR DB Module kontrol etmenizi tavsiye ederim. Yine, açıklar modül yerini, ama ben yine de ilginç ve bilgilendirici buluyorum.