我已经查看了其他几个看起来与问题相同的问题(来自标题).但是,我的情况有点不同.
以下工作(即我获得"成功",我的数据库执行我在运行给定变量的过程时所期望的):
$sql = "MyDB.dbo.myProcedure {$var1}, {$var2}, {$var3}";
$result = sqlsrv_query($myConn, $sql);
if (!$result) {
echo 'Your code is fail.';
}
else {
echo 'Success!';
}
Run Code Online (Sandbox Code Playgroud)
我想通过使用参数创建SQL字符串来避免(或减少)SQL注入的可能性.例如:
$sql = "select * from aTable where col1 = ? AND col2 = ?";
$result = sqlsrv_query($myConn, $sql, array($var1, $var2));
//please note. This code WILL work!
Run Code Online (Sandbox Code Playgroud)
但是,当我使用存储过程执行此操作时,它会失败.它失败,没有通过sqlsrv_errors()报告错误,没有在数据库中采取任何操作,和$result === false.
需要说明的是,以下内容失败:
$sql = "MyDB.dbo.myProcedure ?, ?, ?";
$result = sqlsrv_query($myConn, $sql, array($var1, $var2, $var3));
Run Code Online (Sandbox Code Playgroud)
同样,以相同方式创建的prepare/execute语句也将失败:
$sql = "MyDB.dbo.myProcedure ?, ?, ?";
$stmt …Run Code Online (Sandbox Code Playgroud) 我将在网页中显示数据库(SQL SERVER 2005)表中的行.这些行包含statusID(外键),StatusID由Status表进一步定义(例如id,name,modifiedDate).
各种状态应以不同的方式显示(假设它们只是具有不同的背景颜色).
我使用php来查询数据库,并构建网页表.在构建表时,我将基于该行的状态将css类应用于元素.
我有至少2个选项来做到这一点:
在php中定义代码逻辑来处理它,如果在数据库中更改了状态,我将不得不更改代码.
将"类"存储在数据库中,只需应用已存储的类.
后一种选择对我来说似乎更好,但我不确定将表现数据嵌入数据库是一个糟糕的设计选择.这将是我创建几个Intranet实用程序的基础,我想从右脚开始.
看起来应该这么简单,但我根本无法完成这项工作(我甚至不需要动态完成).例如,假设我有一个简单的2列网格设置,如下所示:
columns : [
{header: 'USER', dataIndex: 'firstName', width:70, cls: 'red'},
{header: 'CATEGORY', dataIndex: 'category', width:100}
]
Run Code Online (Sandbox Code Playgroud)
该cls: 'red'属性仅影响标题,而不影响实际列.我在其他地方看到我应该使用自定义渲染器(也许),但如果我尝试类似的东西:
{header: 'USER', dataIndex: 'firstName', width:70,
renderer: function(value) {
this.addCls('red');
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然得到无聊的白色背景.我也看到人们使用渲染器函数定义,如下所示:function(value, metadata, record, rowIndex, colIndex, store)但是当我使用一个alert()测试输入参数时我会得到undefined除了之外的一切value,这让我相信这可能只适用于ExtJs 4之前的版本.
我也尝试'<span class="red">' + value + '</span>'在渲染器函数中返回类似的内容,但这只突出显示了文本,而不是更改列的整个背景.
我不想覆盖默认的Ext css类,因为我想将背景颜色应用于应用程序中的特定网格,而不是全部.
此外,所讨论的网格的所有列可能具有不同的颜色(请注意,在示例中,我仅将类添加到第一列).
假设在我的css文件中red定义.red {background:#FF0000;}.
在 INSERT 语句之后插入整行的最简单/最有效的方法是什么?
我很确定我可以这样做:
$aQuery = "INSERT into myTable (a, b, c) VALUES (1, 'Hello', 'Goodbye')";
//the IDENTITY coloumn in myTable is named id
$result = sqlsrv_query($myConn, $aQuery );
if ($result) {
$res = sqlsrv_query('SELECT LAST_INSERT_ID()');
$row = sqlsrv_fetch_array($res);
$lastInsertId = $row[0];
$subQuery = "SELECT * FROM myTable where id = {$lastInsertId}";
$subResult = sqlsrv_query($myConn, $subQuery);
if ($subResult) {
while($subrow = sqlsrv_fetch_array($subResult)) {
echo($subrow ['id'] . ', '.
$subrow ['a'] . ', '.
$subrow ['b']); //etc... …Run Code Online (Sandbox Code Playgroud)