2017-06-15 31 views
1

我在使用php和mysql進行準備語句時遇到了問題。出於某種原因,我的變量是不正確的。

注:
- $庫MySQLi = $康恩
有變量和參數的東西(編寫語句)

$stmt = $mysqli->prepare("INSERT INTO `inschrijving` (`id`, `bezoeker_naam`, `bezoeker_voornaam`, `bezoeker_email`, `bezoeker_straat`, `bezoeker_huisnummer`, `bezoeker_postnummer`, `bezoeker_plaats`) VALUES (NULL, '{$mysqli->real_escape_string('?')}', '{$mysqli->real_escape_string('?')}', '{$mysqli->real_escape_string('?')}', '{$mysqli->real_escape_string('?')}', '{$mysqli->real_escape_string('?')}', '{$mysqli->real_escape_string('?')}', '{$mysqli->real_escape_string('?')}');");} 

       $stmt->bind_param("sssssss", $naam, $voornaam, $email, $straat, $huisnummer, $postcode, $plaats); 

       $naam = $_POST['naam']; 
       $voornaam = $_POST['voornaam']; 
       $email = $_POST['email']; 
       $straat = $_POST['straat']; 
       $huisnummer = $_POST['nummer']; 
       $postcode = $_POST['postcode']; 
       $plaats = $_POST['plaats']; 

       $stmt->execute(); 

我得到的是這樣的錯誤:

mysqli_stmt :: bind_param():變量數不匹配的 數準備好的語句中的參數

我正在做新準備的陳述,我需要有人指出我的缺點。這將幫助我更好地瞭解準備好的陳述。 :)

+1

嘗試刪除問號周圍的引號。 '('?')' - >'(?)' – Edward

回答

0

當使用預處理語句的工作,你不應該逃避綁定變量:

$stmt = $mysqli->prepare("INSERT INTO `inschrijving` (`id`, `bezoeker_naam`, `bezoeker_voornaam`, `bezoeker_email`, `bezoeker_straat`, `bezoeker_huisnummer`, `bezoeker_postnummer`, `bezoeker_plaats`) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)"); 
0

我將宣佈像這樣的準備部分上方的POST變量和刪除$ mysqli-> real_escape_string()從聲明:

$naam = $_POST['naam']; 
$voornaam = $_POST['voornaam']; 
$email = $_POST['email']; 
$straat = $_POST['straat']; 
$huisnummer = $_POST['nummer']; 
$postcode = $_POST['postcode']; 
$plaats = $_POST['plaats']; 

$stmt = $mysqli->prepare("INSERT INTO `inschrijving` (`id`, `bezoeker_naam`, `bezoeker_voornaam`, `bezoeker_email`, `bezoeker_straat`, `bezoeker_huisnummer`, `bezoeker_postnummer`, `bezoeker_plaats`) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param("sssssss", $naam, $voornaam, $email, $straat, $huisnummer, $postcode, $plaats)"; 
$stmt->execute(); 

您可以將$ mysqli-> real_escape_string()放在POST變量周圍。例如:

$naam = $mysqli->real_escape_string($_POST['naam']); 

最後,確保所有變量都是字符串,並且不要忘記關閉$ stmt。

$stmt->close();