/// <summary> /// Quotes given command. /// </summary> public override object Quote(ScriptContext context, object strobj, PDOParamType param_type) { var obj = MySql.EscapeString(strobj); Debug.Assert(obj != null); // quote the string with '...' if (obj.GetType() == typeof(string)) { return("'" + (string)obj + "'"); } else if (obj.GetType() == typeof(PhpBytes)) { var bytes = (PhpBytes)obj; byte[] data = new byte[bytes.Length + 2]; Array.Copy(bytes.ReadonlyData, 0, data, 1, bytes.Length); data[0] = data[data.Length - 1] = (byte)'\''; return(new PhpBytes(data)); } else { Debug.Fail(); return(String.Empty); } }
public override object Quote(ScriptContext context, object strobj, PDOParamType param_type) { // From mysql extension // in addition, resulting string is quoted as '...' if (strobj == null) return string.Empty; // binary aware: if (strobj.GetType() == typeof(PhpBytes)) { var strbytes = (PhpBytes)strobj; if (strbytes.Length == 0) return strobj; var bytes = strbytes.ReadonlyData; List<byte>/*!*/result = new List<byte>(bytes.Length + 2); result.Add((byte)'\''); for (int i = 0; i < bytes.Length; i++) { switch (bytes[i]) { case (byte)'\0': result.Add((byte)'\\'); goto default; case (byte)'\\': result.Add((byte)'\\'); goto default; case (byte)'\n': result.Add((byte)'\\'); result.Add((byte)'n'); break; case (byte)'\r': result.Add((byte)'\\'); result.Add((byte)'r'); break; case (byte)'\u001a': result.Add((byte)'\\'); result.Add((byte)'Z'); break; case (byte)'\'': result.Add((byte)'\\'); goto default; case (byte)'"': result.Add((byte)'\\'); goto default; default: result.Add(bytes[i]); break; } } result.Add((byte)'\''); return new PhpBytes(result.ToArray()); } // else string str = Core.Convert.ObjectToString(strobj); StringBuilder sb = new StringBuilder(); sb.Append('\''); for (int i = 0; i < str.Length; i++) { char c = str[i]; switch (c) { case '\0': sb.Append(@"\0"); break; case '\\': sb.Append(@"\\"); break; case '\n': sb.Append(@"\n"); break; case '\r': sb.Append(@"\r"); break; case '\u001a': sb.Append(@"\Z"); break; case '\'': sb.Append(@"''"); break; case '"': sb.Append("\"\""); break; default: sb.Append(c); break; } } sb.Append('\''); return sb.ToString(); }
public virtual object quote(ScriptContext context, object str, [Optional] object parameter_type) { PDOParamType pt = PDOParamType.PDO_PARAM_STR; if (parameter_type != null && parameter_type != Arg.Default) { pt = (PDOParamType)PHP.Core.Convert.ObjectToInteger(parameter_type); } return(this.m_driver.Quote(context, PHP.Core.Convert.ObjectToString(str), pt)); }
private bool bindValues(ScriptContext context, PhpArray parameters, PDOParamType dt) { if (parameters == null || parameters.Count == 0) { return(true); } PreparedMode mode = PreparedMode.None; foreach (var item in parameters) { Debug.Assert(item.Key.Object != null); if (item.Key.IsString && (mode == PreparedMode.Named || mode == PreparedMode.None)) { mode = PreparedMode.Named; } else if (item.Key.IsInteger && (mode == PreparedMode.Numbers || mode == PreparedMode.None)) { mode = PreparedMode.Numbers; } else { PhpException.Throw(PhpError.Warning, "Invalid bind parameter " + item.Key.Object.ToString()); return(false); } // bind the parameter var bindresult = this.bindValue(context, item.Key.Object, item.Value, dt); if (!Core.Convert.ObjectToBoolean(bindresult)) { PhpException.Throw(PhpError.Warning, "Can't bind parameter " + item.Key.Object.ToString()); return(false); } } // return(true); }
public abstract object Quote(ScriptContext context, object strobj, PDOParamType param_type);
private bool bindValue(object param, object value, PDOParamType? type) { if (this.m_prepMode == PreparedMode.None) { PhpException.Throw(PhpError.Warning, "PDO statement not prepared or no parameters to bind"); return false; } IDataParameter p; switch (this.m_prepMode) { case PreparedMode.Named: string pName = PHP.Core.Convert.ObjectToString(param); string pNameSql; if (pName.Length > 0 && pName[0] == ':') { pName = pName.Substring(1); } if (this.m_prepName != null && this.m_prepName.TryGetValue(pName, out pNameSql)) { p = (IDataParameter)this.CurrentCommand.Parameters[pNameSql]; } else { PhpException.Throw(PhpError.Warning, "Parameter '" + pName + "' not found"); return false; } break; case PreparedMode.Numbers: int pId = PHP.Core.Convert.ObjectToInteger(param); if (this.m_prepNum == null || pId >= this.m_prepNum.Count) { PhpException.Throw(PhpError.Warning, "Parameter n° " + pId + " not found"); return false; } else { p = (IDataParameter)this.CurrentCommand.Parameters[this.m_prepNum[pId]]; } break; default: throw new NotImplementedException("Unknown prepared mode in PDOStatement::bindValue"); } p.Value = value ?? DBNull.Value; if (type.HasValue) { switch (type.Value) { case PDOParamType.PDO_PARAM_BOOL: p.DbType = DbType.Boolean; break; case PDOParamType.PDO_PARAM_INT: p.DbType = DbType.Int32; break; case PDOParamType.PDO_PARAM_LOB: p.DbType = DbType.Binary; break; case PDOParamType.PDO_PARAM_NULL: break; //TODO : set right type case PDOParamType.PDO_PARAM_STMT: break; //TODO : find what it is case PDOParamType.PDO_PARAM_STR: p.DbType = DbType.String; break; } } return true; }
public override object Quote(ScriptContext context, object strobj, PDOParamType param_type) { // From mysql extension // in addition, resulting string is quoted as '...' if (strobj == null) { return(string.Empty); } // binary aware: if (strobj.GetType() == typeof(PhpBytes)) { var strbytes = (PhpBytes)strobj; if (strbytes.Length == 0) { return(strobj); } var bytes = strbytes.ReadonlyData; List <byte> /*!*/ result = new List <byte>(bytes.Length + 2); result.Add((byte)'\''); for (int i = 0; i < bytes.Length; i++) { switch (bytes[i]) { case (byte)'\0': result.Add((byte)'\\'); goto default; case (byte)'\\': result.Add((byte)'\\'); goto default; case (byte)'\n': result.Add((byte)'\\'); result.Add((byte)'n'); break; case (byte)'\r': result.Add((byte)'\\'); result.Add((byte)'r'); break; case (byte)'\u001a': result.Add((byte)'\\'); result.Add((byte)'Z'); break; case (byte)'\'': result.Add((byte)'\\'); goto default; case (byte)'"': result.Add((byte)'\\'); goto default; default: result.Add(bytes[i]); break; } } result.Add((byte)'\''); return(new PhpBytes(result.ToArray())); } // else string str = Core.Convert.ObjectToString(strobj); StringBuilder sb = new StringBuilder(); sb.Append('\''); for (int i = 0; i < str.Length; i++) { char c = str[i]; switch (c) { case '\0': sb.Append(@"\0"); break; case '\\': sb.Append(@"\\"); break; case '\n': sb.Append(@"\n"); break; case '\r': sb.Append(@"\r"); break; case '\u001a': sb.Append(@"\Z"); break; case '\'': sb.Append(@"\'"); break; case '"': sb.Append("\\\""); break; default: sb.Append(c); break; } } sb.Append('\''); return(sb.ToString()); }
public override object Quote(Core.ScriptContext context, object strobj, PDOParamType param_type) { throw new NotImplementedException(); }
/// <summary> /// Quotes given command. /// </summary> public override object Quote(ScriptContext context, object strobj, PDOParamType param_type) { var obj = MySql.EscapeString(strobj); Debug.Assert(obj != null); // quote the string with '...' if (obj.GetType() == typeof(string)) { return "'" + (string)obj + "'"; } else if (obj.GetType() == typeof(PhpBytes)) { var bytes = (PhpBytes)obj; byte[] data = new byte[bytes.Length + 2]; Array.Copy(bytes.ReadonlyData, 0, data, 1, bytes.Length); data[0] = data[data.Length - 1] = (byte)'\''; return new PhpBytes(data); } else { Debug.Fail(null); return String.Empty; } }
private bool bindValues(ScriptContext context, PhpArray parameters, PDOParamType dt) { if (parameters == null || parameters.Count == 0) return true; PreparedMode mode = PreparedMode.None; foreach (var item in parameters) { Debug.Assert(item.Key.Object != null); if (item.Key.IsString && (mode == PreparedMode.Named || mode == PreparedMode.None)) { mode = PreparedMode.Named; } else if (item.Key.IsInteger && (mode == PreparedMode.Numbers || mode == PreparedMode.None)) { mode = PreparedMode.Numbers; } else { PhpException.Throw(PhpError.Warning, "Invalid bind parameter " + item.Key.Object.ToString()); return false; } // bind the parameter var bindresult = this.bindValue(context, item.Key.Object, item.Value, dt); if (!Core.Convert.ObjectToBoolean(bindresult)) { PhpException.Throw(PhpError.Warning, "Can't bind parameter " + item.Key.Object.ToString()); return false; } } // return true; }