【问题标题】:beginner php mysql : error trying to run a query初学者php mysql:尝试运行查询时出错
【发布时间】:2017-03-25 15:38:31
【问题描述】:

我正在尝试创建一个非常简单的网络应用程序来检查一个元素是否在数据库中。

如果元素在数据库中至少存在一次,则回显“YES”,否则如果该元素不存在,则回显“NO”。

这是我的代码:

$mysql = mysqli_connect(/* can't share anything here */) or die ("ERROR CONNECTING TO THE DB");

if(isset($_POST['submit'])) {

    $theAddress = $_POST['url'];  

    $result = "SELECT * FROM data WHERE url = " . $theAddress;

    $query = mysqli_query($mysql, $result);

    if (!$query) {
        printf("Error");
    } else {
        printf("NO ERROR");
    }

这里的问题是 PHP 总是回显“错误”。为什么?

【问题讨论】:

  • 学习使用参数将值放入查询中。出于各种原因,您应该从第一天开始学习这一点。其中之一是防止诸如此类的语法错误。注意:如果您在运行之前打印出查询,则语法错误可能很明显。还有一条建议:字符串应该被称为$sql$query$result 不是一个合理的查询字符串名称。
  • 尝试用$result = "SELECT * FROM data WHERE url = '" . $theAddress."'";替换$result = "SELECT * FROM data WHERE url = " . $theAddress;
  • 使用准备好的语句

标签: php html mysql mysqli


【解决方案1】:

为了成功执行 SQL 查询,您需要将字符串值放在引号内。

所以您的查询将是:

$result = "SELECT * FROM data WHERE url = '" . $theAddress . "'";

【讨论】:

  • 它不会改变任何东西
  • 然后使用var_dump(mysqli_error($mysql));打印错误并与我们分享,以便我们找出问题所在
【解决方案2】:

您需要在值周围加上引号,因为它是一个字符串。

$result = "SELECT * FROM data WHERE url = '" . $theAddress . "'";

但如果你学会了使用 mysqli_stmt_bind_param() 准备的查询会更好,那么你就不必担心这个了。

【讨论】:

  • 它不会改变任何东西
【解决方案3】:

尝试使用这样的准备好的语句:

$stmt = mysqli_stmt_init($mysql);
if (mysqli_stmt_prepare($stmt, 'SELECT * FROM data WHERE url = ?')) {
  mysqli_stmt_bind_param($stmt, "s", $theAddress);
  mysqli_stmt_execute($stmt);
  $result = mysqli_stmt_get_result($stmt);
}

文档:
http://us.php.net/manual/en/mysqli-stmt.prepare.php
http://us.php.net/manual/en/mysqli-stmt.get-result.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2020-10-29
    • 2020-01-31
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多