如何在php中使用mysql WHERE查询中的SUBSTRING()

如何在php中使用mysql WHERE查询中的SUBSTRING(),php,mysql,Php,Mysql,我在数据库字段中有一个字符串(称为term6eyfs),它由数字->555555组成 我想数一数他们中有多少人在特定的位置上有特定的号码 我尝试了以下代码,但遇到了一个给定的布尔值。。。错误 $pos=2; $analyse_ot="SELECT COUNT(*) AS ot_count FROM base, users WHERE base.base_id=$base AND users.base_id=$base AND users.SUBSTRING(term6eyfs,$pos,1)=

我在数据库字段中有一个字符串(称为
term6eyfs
),它由数字->555555组成

我想数一数他们中有多少人在特定的位置上有特定的号码

我尝试了以下代码,但遇到了一个给定的布尔值。。。错误

$pos=2;
$analyse_ot="SELECT COUNT(*) AS ot_count FROM base, users
WHERE base.base_id=$base 
AND
users.base_id=$base
AND
users.SUBSTRING(term6eyfs,$pos,1)='4'";

$result_ot=mysqli_query($con,$analyse_ot);
$row_ot = mysqli_fetch_assoc($result_ot);//this is where I get the error
$total_ot= $row_ot['ot_count'];
$otper=($total_ot/$total)*100;

我猜我构建查询的方式(特别是最后一行)是不正确的,但为什么呢?

根据您在评论中提供的其他详细信息,我想说这就是您想要的:

SELECT COUNT(*) AS ot_count 
  FROM base, users
  WHERE base.base_id=$base 
  AND   users.base_id=$base
  AND   SUBSTRING(users.term6eyfs,$pos,1)='4'";
(假设“term6eyfs”是
users
表中的一列名称)

这个问题的背景不清楚。但一般来说,使用“参数绑定”将php变量值注入查询字符串是有意义的。如果您想了解这一点,它可以增强安全性和健壮性


如果您真的想使用
操作符连接这两个表,请重新考虑。该操作符非常慢,通常是
左连接
传递的性能要好得多

根据您在评论中提供的其他详细信息,我想说这就是您想要的:

SELECT COUNT(*) AS ot_count 
  FROM base, users
  WHERE base.base_id=$base 
  AND   users.base_id=$base
  AND   SUBSTRING(users.term6eyfs,$pos,1)='4'";
(假设“term6eyfs”是
users
表中的一列名称)

这个问题的背景不清楚。但一般来说,使用“参数绑定”将php变量值注入查询字符串是有意义的。如果您想了解这一点,它可以增强安全性和健壮性

如果您真的想使用
操作符连接这两个表,请重新考虑。该操作符非常慢,通常是
左连接
传递的性能要好得多

将users.substring()更改为substring

$analyse_ot="SELECT COUNT(*) AS ot_count FROM base, users
WHERE base.base_id=$base 
AND
users.base_id=$base
AND
SUBSTRING(term6eyfs,$pos,1)='4'";
将users.substring()更改为substring

$analyse_ot="SELECT COUNT(*) AS ot_count FROM base, users
WHERE base.base_id=$base 
AND
users.base_id=$base
AND
SUBSTRING(term6eyfs,$pos,1)='4'";

SUBSTRING
不是
users
表中的字段。不清楚最后一行实际上要表达什么。您必须在问题中添加更多细节。什么是“term6eyfs”means@arkascha好的,谢谢,这很有道理。那么,如何使用SUBSTRING()来帮助缩小查询范围呢。你说不清楚-为此道歉。。。我只想计算第二个字符为4的实例。@Assen-term6eyfs是字段名
子字符串
不是
用户
表的字段。不清楚您实际想用最后一行表达什么。您必须在问题中添加更多细节。什么是“term6eyfs”means@arkascha好的,谢谢,这很有道理。那么,如何使用SUBSTRING()来帮助缩小查询范围呢。你说不清楚-为此道歉。。。我只想计算第二个字符为4的实例。@Assen-term6eyfs是字段的名称谢谢@arkascha-will doThank@arkascha-will doThank you