如何将Regex与php / sql脚本集成?

时间:2013-01-19 17:08:32

标签: php regex

再次专家,

我很感激Jason Sperske的帮助下面有正则表达式:

$pattern = "/(\d{2})([ND]?)(\d*)(GG[\d]*)?/";

function format($matches) {
  return $matches[1][0].(strlen($matches[2][0])>0?$matches[2][0]:" ").$matches[3][0].(strlen($matches[4][0])>0?"  ".$matches[4][0]:"");
}

正则表达式有助于格式化为ID字段输入的值。

例如,如果用户输入12343GG90494,正则表达式将在 GG 之前插入2个空格,从而产生以下输出12343 GG90494

这只是正则表达式格式化用户输入的一个示例。

这很重要,因为我们的应用程序的用户通常不会放置2个额外的空格和结果,他们的搜索不会产生任何结果。

上面的正则表达式为我们解决了这个问题。

我现在的问题是使用带有以下示例查询的正则表达式:

$tid = $_GET["tid"];

// Connect to SQL Server database
include("../connections/TDConnect.php");

 $tsql = "SELECT * FROM TC(dtops.dbo.tSearch, Name, '\"$tid*\"')";

如何将它与名为$ tid的输入参数一起使用?

非常感谢您的协助。

1 个答案:

答案 0 :(得分:1)

如果没有访问TDConnect.php,很难确切知道你需要什么,所以这个建议是通用的(我猜MySql具体,但不是那么多)。使用prepared statements!专门针对这个问题:

$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
  echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("SELECT * FROM Table WHERE Col LIKE (?)"))) {
  echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$stmt->bind_param("s", $tid)) {
  echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}

if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}