【问题标题】:Prepared statement error with insert插入准备好的语句错误
【发布时间】:2014-08-14 03:01:19
【问题描述】:

我第一次尝试使用准备好的语句以避免 sql 注入,但是当我尝试插入或更新我的数据库时似乎遇到了问题,我使用这些行来做我想做的事:

插入:

 $stmt = $con->prepare("INSERT INTO my_array (image1,image2,image3,image4, info, type, lat, lng, date_created, status, created_by, closed_by, date_finished) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") ;

$stmt->bind_param('bbbbssddsssss', $image1, $image2, $image3, $image4, $info, $type, $lat, $long, $date, $opened, $user, $closed_by, $closed_by, $date_finished);

$stmt->execute();

$result = $stmt->get_result();

更新:

$stmt = $con->prepare("UPDATE users SET fullname =  IF(LENGTH(?) = 0, fullname, ?), email = IF(LENGTH(?) = 0, email, ?), phone_num = IF(LENGTH(?) = 0, phone_num, ?) , address = IF(LENGTH(?) = 0, address, ?)  WHERE username = '$user'") ;

$stmt->bind_param('ssssiiss',$fullname, $fullname, $email, $email, $phone_number , $phone_number, $address, $address);

$stmt->execute();

$result = $stmt->get_result();

在这两种情况下,我都得到一个“错误”的结果。

【问题讨论】:

  • 检索返回的mysql错误并开始。
  • 我没有任何 sql 错误
  • 如果您的查询中有错误,则一定有错误。如果不是,则查询没有问题。
  • 在假设成功之前不要低估错误。 php.net/manual/en/function.error-reporting.php
  • 如果我没记错的话,您尝试在插入时将 14 个变量绑定到 13 个值。关于您的更新:为什么不为用户名使用参数 - 可能是您传递空值?

标签: php mysql prepared-statement


【解决方案1】:

在第一个你有 $closed_by 重复。

第二个你在准备好的语句中有$user。那一定是个参数。

【讨论】:

  • 我改变了它,它知道有效,但不适用于上传图像。任何建议,就用户而言,我会立即调查
  • 在插入中我得到了 4 个 longblob 类型的图像,我将它们插入到我的数据库中的前 4 个值(image1、image2...)
  • @nicolasmanic 还有什么在那里不起作用?数据库中没有新条目还是字段为空?
  • 我没有收到任何错误,但它会上传空文件。如果我的代码没有问题,那么我使用的上述部分可能有问题,以便检查我是否有图片上传code: $image1 = isset($_POST['image_1']) ? $_POST['image_1'] : ""; $image2 = isset($_POST['image_2']) ? $_POST['image_2'] : ""; $image3 = isset($_POST['image_3']) ? $_POST['image_3'] : ""; $image4 = isset($_POST['image_4']) ? $_POST['image_4'] : "";
【解决方案2】:

在每个语句中使用正确的错误处理:

if(!($stmt = $con->prepare("INSERT INTO my_array (image1,image2,image3,image4, info, type, lat, lng, date_created, status, created_by, closed_by, date_finished) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"))
{
     echo "Prepare failed: (" . $con->errno . ") " . $con->error;
}

if(!$stmt->bind_param('bbbbssddsssss', $image1, $image2, $image3, $image4, $info, $type, $lat, $long, $date, $opened, $user, $closed_by, $closed_by, $date_finished))
{
      echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}

if(!$stmt->execute())
{
      echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}

if(!($result = $stmt->get_result())
{
      echo "Getting result set failed: (" . $stmt->errno . ") " . $stmt->error;
}

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2014-06-11
    相关资源
    最近更新 更多