PHP强制var具有某种类型

时间:2011-05-04 14:30:01

标签: mysql variables string

这可能是一个愚蠢的问题,但我可能会这样:)

迫在眉睫

$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函数中的任何内容,因为网站上的其他输入正在使用此函数,我不想弄乱他们的验证。

6 个答案:

答案 0 :(得分:1)

你可以这样做:

$string = (string) $int;

或使用功能

$string = strval($int);

答案 1 :(得分:1)

您无法将变量强制为全局范围中的特定类型。

您可以在函数中强制使用ArrayObject

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'";