【问题标题】:saving to mysql database using php and mysqli使用 php 和 mysqli 保存到 mysql 数据库
【发布时间】:2010-12-04 20:18:48
【问题描述】:

我正在尝试将数据保存到数据库中,但我收到了一个以前从未见过的错误 我有一种预感,它与 db 排序规则有关,但我不确定是什么问题,

这里是查询:

$query1 = "INSERT INTO scape.url (url,normalizedurl,service,idinservice) VALUES (url, normalizedurl, 4, 45454)";
$query = "INSERT INTO scape.url (url, normalizedurl, service, idinservice) VALUES ("
            .$sql->real_escape_string($this->url).","
            .$sql->real_escape_string($this->normalizedUrl).","
            .$sql->real_escape_string($this->service).","
            .$sql->real_escape_string($this->idInService).")";
$result = $sql->query($query);
echo $sql->error;

我得到的错误信息是:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '://www.something/here/here/here/12345,httpwwwsomthighere' 附近使用正确的语法

此字段的数据库排序规则为 utf8-general-ci,字段类型为 varchar 255

对此有什么想法吗?

【问题讨论】:

    标签: php mysql utf-8 mysqli collation


    【解决方案1】:

    如果你这样做,你仍然需要在字符串(url 和 normalizedurl)周围加上引号。这就是它所指的语法问题。

    很遗憾,这不是用 mysqli 传递参数的推荐方式。 mysqli 的全部意义在于它具有查询参数化。例如:

    $mysqli = new mysqli($host, $user, $password, $database);
    if (mysqli_connect_errno()) {
      printf("Connect failed: %s\n", mysqli_connect_error());
      exit;
    }
    $sql = <<<END
    INSERT INTO scape.url (url,normalizedurl,service,idinservice)
    VALUES (?, ?, ?, ?)
    END;
    $stmt = $mysqli->prepare($sql);
    if ($stmt === false) {
      printf("Error executing %s: %s\n", $sql, $stmt->error);
      exit;
    }
    $stmt->bind_param('ssii', $this->url, $this->normalizedUrl,
      $this->service, $this->idInService);
    $stmt->execute();
    

    【讨论】:

    • 感谢您提供的 cletus,如果可以的话,我会在您的屏幕上弹出“您刚刚获得 GURU 徽章”:) 一如既往,您的答案既详细又准确
    猜你喜欢
    • 2017-02-05
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多