0

有人能告诉我为什么在我的脚本中运行以下代码块时,会触发错误,但是当直接通过 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

4

2 回答 2

0

试试这个看看它到底返回了什么

$result = mysqli_query($link, $sql);
var_dump($result);
于 2012-05-18T13:05:16.990 回答
0

您能否检查一下是否有任何字段是数字?您正在每个中发送字符数据,因此这可能是 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 列时,正在生成错误。

于 2012-05-18T13:19:38.883 回答