我的针对SQL注入的代码不起作用(标题中的错误消息)。
我简化了我的代码,但它仍无效。
<?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,它是用自动增量标志创建的。
答案 0 :(得分:2)
你有:
$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-parameter的类型。你有三个sql参数,所以你的第一个函数参数必须指定三种类型(在这种情况下是三次s
),而不仅仅是两种。
在一个侧节点上:我宁愿将mysqli :: prepare的返回值赋给一个名为$statement
而不是$result
的变量。
答案 1 :(得分:0)
你必须在bind_param方法中放三个“s”,因为有三个要绑定的变量
$result = $db->prepare("INSERT INTO links VALUES (NULL, ?, ?, ?)");
$result->bind_param('sss', $url, $title, $ltime);
我最好为自动增量字段而不是空字符串传递空NULL值