【问题标题】:Post Name to php MYSQL database将名称发布到 php MYSQL 数据库
【发布时间】:2015-07-10 23:35:48
【问题描述】:

如果我上传一组字母,这个 php 脚本会报错|5,但如果我为 $phpSign 变量使用数字,一切都会完美运行。

<?php
$device = $_POST["device"];
$randomChar = $_POST["randomChar"];
$phpSign = $_POST["Sig"];
    if($mysql->query("UPDATE premium SET signup = $phpSign WHERE (id, randomChar) = ('$device', '$randomChar')")) die("success");
    else die("error|5");
?>

为什么我不能上传带有脚本的名称,为什么它只能使用数字?如何将名称上传到我的数据库?

【问题讨论】:

  • 只有一个查询时为什么要使用multi_query?
  • 您可以在一个查询中完成所有这些操作,INSERT ... ON DUPLICATE KEY UPDATE
  • 为什么不把randomChar 放在INSERT 语句中?
  • randomChar 是为了确保它发送给唯一的用户,以防万一有人想更改他们的 ID。并注意到,我更新了代码并删除了不必要的位。我还完善了我的问题,因为由于某种原因,单词不会上传,但值会。否则,它会以 error|5 而不是成功而死。

标签: javascript php mysql unity3d upload


【解决方案1】:

$phpSign 周围需要引号,因为它是一个字符,而不是一个数字。

    if($mysql->query("UPDATE premium SET signup = '$phpSign' WHERE (id, randomChar) = ('$device', '$randomChar')")) {
        die("success");
    } else {
        die("error|5:" . $mysqli->error);
    }

正如我所展示的,当查询失败时,您应该显示 MySQL 错误消息,而不仅仅是一般的错误消息。这样你就知道它失败的原因了。

附:你应该学会使用prepared statements而不是替换变量,这样你就不用担心引用了,也避免了SQL注入问题。

【讨论】:

  • 你能根据我编辑的代码更新你的评论吗?我刚刚改了,恐怕你引用的部分不再是剧本的一部分了。
  • 成功了!我很高兴这很简单。我真希望我在调试 php 脚本方面做得更好,但我现在非常新手。我假设“.$mysqli->error”添加到原始基本错误,并提供更深入的调试?如果是这样,那就太棒了,而且会派上用场。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2015-07-17
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
相关资源
最近更新 更多