php
  • mysqli
  • prepared-statement
  • 2013-10-18 194 views -4 likes 
    -4

    我想创建我的MySQLi的第一个准备好的声明,因为我知道我做我的查询的方式是开放的SQL注入。PHP MySQLi准备声明

    我真的不理解这个的bind_param和bind_result部分。有人能以最愚蠢的方式向我解释这一点吗?

    这是我的查询工作。

    $sql = "UPDATE formdata SET name = '$varName', email = '$varEmail', address = '$varAddress', city = '$varCity', state = '$varState', zip = '$varZip', submitDate = '$varDate' WHERE promoCode = '$varPromo'"; 
    $mysqli->query($sql); 
    

    这里是我对准备好的声明的尝试。

    $query = "UPDATE formdata SET name = ?, email = ?, address = ?, city = ?, state = ?, zip = ?, submitDate = ? WHERE promoCode = '$varPromo'"; 
    $stmt = $mysqli->prepare($query); 
    $stmt->bind_param("s", $varName, $varName, $varEmail, $varAddress, $varCity, $varState, $varZip, $varDate); 
    $stmt->execute(); 
    $stmt->bind_result($varName, $varName, $varEmail, $varAddress, $varCity, $varState, $varZip, $varDate); 
    $stmt->fetch(); 
    
    header("location: index.php?success=1"); 
    exit(); 
    
    +0

    特拉维斯,你为什么不从一些教程开始呢?我无法想象这两种方法不是以不同层次的细节和表述的口味来解释的。 http://php.net/mysqli.quickstart.prepared-statements – hakre

    回答

    1

    某些错误消息信息会有帮助,但是,有几件事情我应该指出。

    对于初学者来说,在bind_param()第一个参数指示哪些信息是(字符串,整数等)传递,并且必须为每件在同一顺序的信息你列出你的论点。例如。如果你有两个字符串和两个整数你会把:

    $stmt->bind_param("ssii", $str1, $str2, $int1, $int2); 
    

    而且你有你在你的bind_param()bind_result()都使用两倍的变量$varName。对每一条信息使用不同的变量名是最好的做法。然而,在这种情况下,因为你正在执行一个UPDATE声明你只打算让受影响的行数,所以不是$stmt->bind_result(...);使用echo $stmt->affected_rows;

    select语句将是一个完全不同的情况,在这种情况下,你会将结果信息绑定到变量。不过,你应该看看上面发布的教程。他们有很多体面的例子,并且会帮助您为撰写自己准备好的陈述并重新获得结果提供一个起点。

    +0

    非常感谢您的解释。我想我通过观看视频更好地学习,并且有人会一步一步解释它,并阅读所有这些教程。我设法通过观看一些YouTube视频来使其工作。 – Travis

    相关问题