【问题标题】:How to use logical operators in MYSQLI - PHP如何在 MYSQLI 中使用逻辑运算符 - PHP
【发布时间】:2014-11-10 18:02:00
【问题描述】:

我正在编写一个简单的选择语句,由于连接对象是 mysqli,我不能使用 AND , && , OR 之类的运算符,因为它会给出错误

function getdata($value1,$value2)
{
global $conn;
$query = "SELECT id, name from users WHERE id!=$value1 && email==$value2 ";
$result = $conn->query($query);
}

这不起作用:-(

错误:试图获取非对象的属性 .. bla bla ..
这意味着我的 sql 语句有问题,因为当我尝试不使用逻辑运算符时它可以工作,但当然没有用。

使用准备语句和绑定参数 我提到了这个线程SELECT in MYSQLI 并尝试使用准备语句..但我猜我做错了什么

$query=$conn->prepare("SELECT id, name from users WHERE id!=? && email==?");
    $query->bindParam("ss", $value1,$value2); // line 20 error points here
    $query->execute();

错误:

Call to a member function bindParam() on a non-object in /mydir/file.php line 20

附: var_dump($query); 返回bool(false)

【问题讨论】:

标签: php mysql mysqli


【解决方案1】:
SELECT id, name FROM users WHERE id <> $value1 AND email = '$value2'"

&lt;&gt;!= 是一样的。 AND&amp;&amp; 是一样的。您可能会看到AND&lt;&gt;,因为它们是SQL 中的标准。问题是等号运算符是= 而不是==

在您问题的第二部分,ss 是错误的。 d 用于双精度类型,s 用于字符串。

$query=$conn->prepare("SELECT id, name from users WHERE id != ? && email = ?");
$query->bind_param('ds', $value1, $value2);
$query->execute();

您可以在php bind_param function help 上查看类型。

【讨论】:

  • 您的解决方案是针对没有准备声明权的(在我的情况下是用例 1)?有效。 :-) 我不明白有 email = '$value2' 而 id$value1 不需要相同(` 标记)谢谢
  • 比较数字字段时不需要引号。相反,如果该字段是 varchar,则需要引号。
  • 好的,但是由于 m 使用变量,它不是用正确的格式替换数字或 varchar 值吗?我知道它很愚蠢..不要我的:D
【解决方案2】:

您的查询中有多个问题。

  1. 使用“=”而不是“==”进行分配。
  2. 在第一部分中,您已将查询分配给变量 $query,并使用变量 $sql 运行查询(错误)

修改后的代码如下所示:

$query = "SELECT id, name from users WHERE id!='$value1' AND email='$value2'";
$result = $conn->query($query);

【讨论】:

  • 对不起,我写错了 2) 我的代码中有正确的查询.. $result = $conn->query($query);有问题更正。我会尝试使用单个“=”并发布结果谢谢
  • 是的,单个“=”有效。这也没有准备语句用例。简单伟大!! :-)
【解决方案3】:

&amp;&amp;替换为AND

== 替换为“=”

它返回false,但是因为你有一个mysql 语法错误,你也可以尝试打开错误报告来查看异常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多