0

我在谷歌上花了很多时间,我不确定我需要做的最好的方法

我有一个小型 Web 程序,它通过在选择上运行的查询将数字添加到数据库中,以清除某些信息,这些查询只有在某一列中的数字长度为 13 位时才会成功,为什么我不知道。

所以我的问题是使用 sql 或 php 使 sql 列中的数字自动转换为 13 的最佳方法是什么,所以如果我在哪里输入 1 它将在 sql 列中以 0000000000001 而不是 1 结束

我运行 php 的查询非常简单我不太明白为什么它必须有 13

代码如下

<?php include_once "ewcfg9.php" ?>
<?php include_once "adodb5/adodb.inc.php" ?>
<?php include_once "phpfn9.php" ?>
<?php include_once "Productsinfo.php" ?>
<?php include_once "userfn9.php" ?>
<?php
$upc= $_GET['upc'];
sleep(2);
header('Location: Productsedit2.php?upc='.$upc.'');
$serverName = "localhost";
$usr="sl";
$pwd="o.o";
$db="SimpleLabel";

$connectionInfo = array("UID" => $usr, "PWD" => $pwd, "Database" => $db);

$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false)

{

print_r( sqlsrv_errors());

}

$sql="Delete from labelprint where upc=$upc";

$query = sqlsrv_query($conn, $sql) or die(sqlsrv_errors());
$result=sqlsrv_fetch_array($query);
print_r($result); 
sqlsrv_close( $conn);

?>

这有效,但只有在 upc=13 位的情况下,任何人都可以想到是否有办法让 sql 使所有内容都变为 13 位或使 php 自动填充 13 位的字段?

4

3 回答 3

2

由于该列是字符串类型,因此必须这样处理。(一种选择是使用数字列,然后在 PHP 中填充它,或者使用零填充 [我认为 SQL Server 有零填充]。)

您确实应该使用准备好的语句,但至少您需要转义您放入 SQL 的任何字符串。您可能想研究 SQL 注入。


无论如何,我会使用 sprintf:

$padded = sprintf("%013d", (int) $upc);

然后这个:

$sql="Delete from labelprint where upc=$upc";

会成为

$sql="Delete from labelprint where upc='$padded'";

单引号是必需的,因为它是字符串,而不是数字。sprintf 调用中的 int 类型是为了保证 $padded 输出可以安全地放入 SQL 语句中。


您还可以使用 str_repeat 和 strlen 的组合来填充字符串。

于 2012-08-28T14:13:03.173 回答
0

如果该labelprint字段是 int (在这种情况下,为什么其存储为 varchar),您可以按如下方式进行转换:

$sql="Delete from labelprint where cast(upc as unsigned)=$upc";

如果你有有趣的数据,这将不起作用。例如0000000000013转换13000000AB00013不会转换为 13。

编辑:SQL-Server Int 可能是 4 字节,但这为您提供了 -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 的范围(这显然不是4 个数字)

数据类型的变化也使上面的答案变得非常多余。

于 2012-08-28T14:11:31.333 回答
0

如果您在字段中使用字符串而不是 int,则可以尝试以下操作:

$upc = str_pad($upc, 13, "0", STR_PAD_LEFT);

这将填充一个字符串,使其最多 13 个字符,0用作“填充”。

更多信息: http: //php.net/manual/en/function.str-pad.php

于 2012-08-28T14:19:34.693 回答