Laravel 對於 Mysql 欄位string型別查詢,當使用數字對這個欄位進行查詢,PHP弱型別語言導致索引失效

zhangwuphp 發表於 2021-07-22
MySQL Laravel PHP

不知道各位大佬有其他更好的處理方式,
我是直接加了 trait 類,在需要用到的Model use,但這裡會存在SQL隱碼攻擊的風險

trait ModelQueryExpansion
{
    public function scopeConversionWhere($query,$column,$value)
    {
        if (is_array($value)) {
            if (empty($value)) {
                return $query->whereRaw("{$column} in ('')");
            }
            $value = array_unique($value);
            $str = '"' . implode('","', $value) . '"';
            return $query->whereRaw("{$column} in ($str)");
        } elseif(is_numeric($value)) {
            return $query->whereRaw("{$column} = '{$value}'");
        }else{
            return $query->where("{$column} = ?",[$value]);
        }
    }
}

試過大佬提供的方式,改成了這樣
public function scopeConversionWhere($query,$column,$value)
{
      if (is_array($value)) {
          if (empty($value)) {
              return $query->whereRaw("0 = 1");
          }
          $value = array_map(function($v){
              return strval($v);
          },$value);
         return $query->whereIn($column,$value);
      } else{
          return $query->where($column,strval($value));
      }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結