mySQL通过RESULT,但是INSERT没有发生


mySQL Passes RESULT but INSERT not happening

我有一个表单提交给自己。在提交时,生成一个查询并运行,if ($result)然后我使$success = 1在提交电子邮件然后关闭表单的jQuery函数中使用。jQuery函数依赖于$success值为'1'来触发。最近我让某人提交了表单,生成了电子邮件,但是插入查询似乎没有向数据库中输入任何内容。

PHP代码:
require_once ('inc/dbconnect.php');
include ('inc/dataFormat.php');
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
    $qins = sprintf('INSERT INTO becmtrack (siteName, siteNum, location, cluster, enodeName, upgDate, tech, techNum, becm, becmFail, ecm1, ecm2, ecm3, dateAlu, aluContact, aluContNum, trackNum, comment) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',  [VALUES ARE HERE]);
    $rins = mysqli_query($dB, $qins) or die('Error in query => ' . $qins . '<br />' . mysqli_error($dB));
    $success = ($rins) ? 1 : 0;
}

jQuery代码(在一个文档准备函数中):

if ("<? echo $success; ?>" == 1) {
   var mailBody = 'Site Name: <? echo $_POST['siteName2'];?>';
   mailBody += '%0ASite Number: <? echo $_POST['siteNum'];?>';
   mailBody += '%0ALocation Code: <? echo $_POST['location'];?>';
   mailBody += '%0AeCEMs Removed: <? echo $_POST['ecm1'] . ', ' . $_POST['ecm2'] . ', ' . $_POST['ecm3'];?>';
<? if ($_POST['dateAlu'] != '') { ?>
   mailBody += '%0ADate Cards Returned to Company: <? echo $_POST['dateAlu'];?>';
   mailBody += '%0AALU Contact: <? echo $_POST['aluContact'];?>';
   mailBody += '%0AContact Number: <? echo $_POST['aluContNum'];?>';
   mailBody += '%0AShipping Tracking Number (if applicable): <? echo $_POST['trackNum'];?>';
<? } ?>
$('#reloadTrig',window.opener.document).trigger('click');
window.open('mailto:email.address@somecompany.com?subject=eNodeB%20bCEM%20Upgrade%20Completed&body='+mailBody);
if ('<? echo $_POST['addmore'];?>' != 'addmore') {
window.close();
    }
}

是否有某种方式为这段代码生成一个有效的结果,而没有数据被插入到数据库中?

在成功连接到数据库后的查询在大多数情况下是正确的,根据本文档:

http://www.php.net/manual/en/mysqli.query.php

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.


你需要检查是否真的有插入的行

根据这里的文档(和给定的示例)

http://php.net/manual/en/mysqli.commit.php

你可以通过mysqli_commit来检查(在这个例子中,它会因为重复的条目而失败,而不是因为语法错误):

$all_query_ok ? $mysqli->commit() : $mysqli->rollback();

或通过mysqli_affected_rows(只有当insert语句真的插入了一行时,才为真)

$result_query = @mysqli_query($query, $connect);
            if (($result_query == false) &&
               (mysqli_affected_rows($connect) == 0)) 

尝试在insert之后调用mysqli_commit

注:你不应该使用sprintf传递参数,它不会转义它们。您应该使用mysqli_prepare,或者在每个参数周围调用mysqli_real_escape_string

你可以使函数:

function escapeArray($arr)
{
  $ret = array();
  foreach ($arr as $value)
     $ret []=mysqli_real_escape_string($value);
  return $ret;
}