Php db insert返回带有数值的乱码值

Php db insert返回带有数值的乱码值,php,mysql,mysqli,Php,Mysql,Mysqli,假设这是一个主机问题,但我不认为它怎么会读错(在locahost上非常有效) 我返回一个名为$result的数组,对于循环的这个实例,$v是一个电话号码 $k='phone' $v='(555)555-1212' 我试过了 $result[$k] = preg_replace('/(\W*)/', '', $v); 我也试过了 $result[$k] = preg_replace('/[^0-9]/', '', $v); 我已收到从-198040413到1260583916的任何内容的$v值

假设这是一个主机问题,但我不认为它怎么会读错(在locahost上非常有效)

我返回一个名为
$result
数组,对于循环的这个实例,
$v
是一个电话号码

$k='phone'
$v='(555)555-1212'

我试过了

$result[$k] = preg_replace('/(\W*)/', '', $v);
我也试过了

$result[$k] = preg_replace('/[^0-9]/', '', $v);
我已收到从
-198040413
1260583916
的任何内容的
$v
值 预期结果为
55551212

将两种情况下的结果回显到页面会给出预期的结果,因此这不是预处理问题,必须是db问题

我知道这不是一个
int
限制问题,我使用
varchar(10)
来测试这个问题


主机是
Arvixe.com
使用
PHP5.3.27
,我与他们有其他冲突,但是
preg\u replace
应该是非常直截了当的代码(你会认为)

发现了问题,是插入的问题

我将
I
作为类型插入到
varchar
中,将其更改为
s
作为类型修复了它

// does not work
bind_param('i', $phone);

// does work
bind_param('s', $phone);

当插入
varchar
字段时

尝试检查
echo preg\u replace(“/\D+/”,“,”,$v)首先。您需要缩小问题的范围。首先尝试回显它,而不将其保存到数据库中。如果它没有按预期工作,您可以放心地说数据库正常,问题出在其他地方。现在,我真的看不出有什么问题。你没有给出预期的结果和你实际得到的结果。关于
int
preg_replace()
不返回int,而是返回字符串。基本上,我认为你把预期结果和10位数的数字搞混了only@Kender如何插入它们?你的专栏的编码是什么?这可能是一个编码问题…下面是解决方案,谢谢@HamZa为我指明了正确的方向。请记住,当对应变量的类型为integer时使用i,当对应变量的类型为string时使用s。更多信息,请访问:我唯一的问题是。。。为什么
varchar
insert会改变输入数据,即使它是一个完全的数值?解决方案会像用引号括起来一样简单吗?