【问题标题】:Preg_replace for IntegersPreg_replace 用于整数
【发布时间】:2012-07-03 10:03:55
【问题描述】:

由于某种原因,当我将 preg_replace() 用于存储电话号码的输入字段时,我无法将其存储到 MySQL 中。 preg_replace 可以用于整数还是只能用于字符串?

我正在尝试使无法在文本字段中输入字母..有人可以提供一些见解吗?

$tel = $_POST['tel'];

//当我使用preg_replace时,它不会将值存储在MySQL中

$tel = preg_replace($reg_num,'', $tel);

...

    $st->bindParam(6, $tel, PDO::PARAM_INT);

【问题讨论】:

  • 请尝试 $tel = str_replace($reg_num,'', $tel);
  • 显示你的$reg_num var
  • REGEX 模式仅写入并作用于字符串,即使任一部分包含数字。 $reg_num 的值是多少?
  • 您将匹配的替换为空字符串''。你确定$telpreg_replace() 之后不是空的吗?在将echo $tel; 插入数据库之前,您是否尝试过?
  • @Utkanos $reg_num 是 $reg_num = "/[^[:num:]]/";

标签: php mysql pdo integer


【解决方案1】:

preg_replace 会将整数转换为字符串,并正确执行替换。但是,它将返回一个字符串,其中bindParam 需要一个整数。

将电话号码存储为整数通常是不明智的,因为您会丢失任何前导“0”或任何“+”号(如果用于国际号码)。

【讨论】:

  • preg_replace 没有收到整数参数,因此不涉及“强制转换”。否则我同意 100%。
  • 好电话 :) 如果它确实收到一个整数,大概会自动转换?
  • 好吧,记住 PHP 是松散类型的,很难说“整数参数”是什么意思。但即使是整数文字也会被转换为字符串,所以我想你是对的。
【解决方案2】:

认为问题可能是 PDO 需要一个整数作为您的电话参数,而 $tel 变量包含一个字符串。试试吧:

$st->bindParam(6, int($tel), PDO::PARAM_INT);

但是,您可能应该将电话号码存储为字符串(但这可能需要更改您的架构):

$st->bindParam(6, $tel, PDO::PARAM_STR);

【讨论】:

    【解决方案3】:

    如果您没有常规的 exp.. 则只需使用 str_replace();

    $tel = str_replace ($reg_num,'', $tel);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2016-04-05
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多