这可能是一个愚蠢的问题,但我可能会这样:)
迫在眉睫
$tel1 = '05';// string
settype($tel1,'string');
$tel1 = 06;//either throw error, or convert it to string automatically.
var_dump($tel1);//(string [2]) 05
上面的代码是我的头脑,所以可能不准确,但我需要将变量保持为字符串而不是数字,因为我做了一些愚蠢的事情,现在我的电话号码失去领先的0: - (
n我没有重写它,因为它会搞乱其他数字类型,b4你问这是db的自动服务来检查它是否是一个数值,
UPDATE 这是问题
function escape($str){
if(is_numeric($str)){
return $str;
}else{
return "'".mysql_real_escape_string($str).'\'';
}
}
$tel1 = "06";
$sql = 'SELECT * FROM blabla WHERE id = '.escape($tel1).'';
//above is same as below
$sql = 'SELECT * FROM blabla WHERE id = 06 ';
我无法更改scape函数中的任何内容,因为网站上的其他输入正在使用此函数,我不想弄乱他们的验证。
答案 0 :(得分:1)
你可以这样做:
$string = (string) $int;
或使用功能
$string = strval($int);
答案 1 :(得分:1)
您无法将变量强制为全局范围中的特定类型。
您可以在函数中强制使用Array
和Object
。
function getElementsByClassName(DOMNode $parentElement, Array $classNames) {
...
}
如果传递的对象不是DOMNode
(或子类)的实例化,或者如果没有传递Array
作为第二个参数,则会出现错误。
你当然可以施放任何变量,例如(string) $tel1
。
你不应该将电话号码视为Int
,因为前导零和可能的括号和破折号。此外,一旦您的电话号码为Int
,它将不再知道其0
填充,因为它将被丢弃,因此将其重新投放将不会为您提供原始String
。
答案 2 :(得分:1)
您对数字内容使用is_numeric
测试,而不是整数类型。但是你接下来一个名为$str
的变量,暗示你想要它是一个字符串。
也许使用:
function escape($val) {
if (is_numeric($val) && !is_string($val)) {
return $val;
}
else{
return "'" . mysql_real_escape_string($val) . '\'';
}
}
现在字符串将被转义和引用,但不是,如果它们只包含数字内容。
答案 3 :(得分:0)
要投射变量,您可以使用以下内容:
$i = 1;
$s = (string) $i;
根据数据库适配器的不同,您可能无法检测从数据库返回的类型。我相信它是PDO,它将所有内容(甚至是INT值)作为字符串返回。
number_format()
函数也可能对您有用。
答案 4 :(得分:0)
如果您将变量声明为:
$var = 06;
它立即变为6而没有前导零,因为当涉及整数时前导零是没有意义的,因此它被删除了。
换句话说,您的变量必须创建为字符串,这可能是您自己推断的。
快速修复如下:您可以在escape()函数中添加另一个参数。
例如:
function escape($str, $force_str = false)
{
if($force_str)
{
// do your conversion, the rest of the site will by default pass false so nothing will be broken
}
}
答案 5 :(得分:0)
正如亚历克斯所说,首先要确保电话号码永远不会在您自己的代码中从字符串转换为int。然后,您需要确保在发送到SQL DB时不会转换它。 如果你这样做,它应该工作:
$sql = "SELECT * FROM blabla WHERE id = '" . mysql_real_escape_string($tel1) . "'";
这与
相同$sql = "SELECT * FROM blabla WHERE id = '06'";