2015-10-27 49 views
0

我對SQL注入的代碼不起作用(標題中的錯誤消息)。警告:mysqli_stmt :: bind_param():類型定義字符串中元素的數量與綁定變量的數量不匹配11

我簡化了我的代碼,但它仍然無法正常工作。

<?php 
include "conf.php"; 

$db = new mysqli($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS, $MYSQL_DB); 

$ltime =10; 
$url= 1; 
$title =2; 



$result = $db->prepare("INSERT INTO links VALUES ('', ?, ?, ?)"); 
$result->bind_param('ss', $url, $title, $ltime); 
$result->execute(); 

我創建了DB,所有變量都是整數,第一個值是ID,它是用一個自動遞增標誌創建的。

回答

-1

你必須把三「s」表示bind_param方法來,因爲有三個變量綁定

$result = $db->prepare("INSERT INTO links VALUES (NULL, ?, ?, ?)"); 

$result->bind_param('sss', $url, $title, $ltime); 

我也更好地傳遞一個空NULL值用於autoincremented字段而不是空字符串

+0

非常感謝!你的回答非常有用! – user5494725

-1

試試這個,

$result = $db->prepare("INSERT INTO links VALUES (?, ?, ?, ?)"); 
               ^
$result->bind_param('ss', $url, $title, $ltime); 
1

您有:

$result->bind_param('ss', $url, $title, $ltime); 

但它應該是

$result->bind_param('sss', $url, $title, $ltime); 


bool mysqli_stmt::bind_param (string $types , mixed &$var1 [, mixed &$... ])
第一個函數參數決定的各約束變量/ SQL參數的類型。你有三個sql參數,所以你的第一個函數參數必須指定三種類型(在這種情況下是s的三倍),而不僅僅是兩個。

而在一個側面節點上:我寧願將mysqli :: prepare的返回值賦給名稱爲$statement的變量,而不是$result

相關問題