有人能告诉我为什么在我的脚本中运行以下代码块时会触发错误,但是当直接通过 php myadmin 尝试 sql 查询时,没有问题。
脚本中运行着一个 mysql 连接。
// Generate a random key and add details to specials table
$email = $_POST['specials'];
$randomKey = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',12)),12);
$sql = "
INSERT INTO specials SET
id='',
email='$email',
verified='0',
`key`='$randomKey',
timestamp=NOW()
";
if (!mysqli_query($link, $sql))
{
$error = 'Error adding email address to specials table.';
include "$docRoot/html/main/error.html.php";
exit();
}
我很确定我已经正确编码了这个,在我进行跟踪和错误测试会议之前,我认为可以简要地看一下这个,并告诉我他们是否发现了任何可能躲避我的明显错误。
感谢您抽出宝贵时间通读本文!
编辑:
使用以下代码:
if (!mysqli_query($link, $sql12))
{
echo mysqli_error();
$error = 'Error adding email address to specials table.';
include "$docRoot/html/main/error.html.php";
exit();
}
我得到以下输出:
Warning: mysqli_error() expects exactly 1 parameter, 0 given in /serveraddress/includes/inc/assistors/controllers.inc.php on line 161
试试这个看看它到底返回了什么
$result = mysqli_query($link, $sql);
var_dump($result);
您能否检查是否有任何字段是数字的?您正在发送每个字符数据,因此这可能是SQL失败的原因。
既然你提到ID是一个INT,那么请使用下面修改后的代码:
// Generate a random key and add details to specials table
$email = $_POST['specials'];
$randomKey = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',12)),12);
$sql = "
INSERT INTO specials SET
id=0,
email='$email',
verified=0,
`key`='$randomKey',
timestamp=NOW()
";
if (!mysqli_query($link, $sql))
{
$error = 'Error adding email address to specials table.';
include "$docRoot/html/main/error.html.php";
exit();
}
''
表示空白字符串,MySQL无法成功地将空白字符串转换为INT类型的数字,因此它使您的SQL INSERT命令失败。因此,您需要发送0
或者如果您的 ID 列允许NULL
那么您也可以发送NULL
。但是发送''
会产生错误。
这里需要注意的一点是,您发送给已验证'0'
不会触发错误,因为'0'
成功转换为0
因此MySQL对此没有问题。
当您尝试将''
即空白字符串保存到 ID 列时生成错误。