未使用预准备语句存储的数据

Data not stored using prepared statements

提问人:micky 提问时间:2/3/2016 最后编辑:micky 更新时间:2/3/2016 访问量:108

问:

我只是在学习使用准备好的语句并卡在这里。普通方法没有问题。没有显示任何错误,但数据未存储在数据库中,尽管它显示“输入的数据”。

$db = new mysqli("localhost", "root","","learndb");

if ($db->connect_error) {
    die("Connection failed this is the error: " . $db->connect_error);
}

$stmt = $db->prepare("INSERT INTO studentrecords (Name, email, Phone, school,dob,father,feereceived,due,image) VALUES (?,?,?,?,?,?,?,?,?)");
$stmt->bind_param("ssisssiib",$first,$email,$phone,$school,$dob,$father,$feereceived,$due,$image);
$stmt->execute();

if($stmt)
{
    echo"data entered";
}

更新

存储数据,但不是所需的类型。我应该在用户输入中指定所有类型吗?html表单中的模式也不起作用。

PHP 的MySQL

评论

0赞 Mr. Engineer 2/3/2016
变量的类型是什么?blob 还是字符串类型?$image
0赞 micky 2/3/2016
@Mr.工程师 blob 类型。

答:

0赞 Professor Abronsius 2/3/2016 #1

我建议你用if条件包装整个bind_param并执行,因为如果有一个小问题,语句将无法准备。在这种情况下,我猜可能是每个变量/字段的类型在某个时候是错误的 - 可能是 / 部分。imageb

您可以回显每种使用的类型,这可能有助于跟踪它:gettype

echo gettype($first), gettype($email), gettype($phone),
     gettype($school), gettype($dob), gettype($father), 
     gettype($feereceived), gettype($due), gettype($image);


$db = new mysqli("localhost", "root","","learndb");

if ($db->connect_error) {
    die("Connection failed this is the error: " . $db->connect_error);
}

$stmt = $db->prepare("INSERT INTO studentrecords (`Name`, `email`, `Phone`, `school`,`dob`,`father`,`feereceived`,`due`,`image`) VALUES (?,?,?,?,?,?,?,?,?)");

if($stmt) {
    $stmt->bind_param("ssisssiib",$first,$email,$phone,$school,$dob,$father,$feereceived,$due,$image);
    $stmt->execute();
} else {
    echo 'Failed to prepare the sql statement';
}

评论

0赞 micky 2/3/2016
它全部显示为字符串。但我在数据库中将 dob 设置为 DATE,但它不显示为日期而不是 2053-4-4,它只显示 2053。