Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 public abstract object Quote(ScriptContext context, object strobj, PDOParamType param_type);
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
 public abstract object Quote(ScriptContext context, object strobj, PDOParamType param_type);
Ejemplo n.º 8
0
        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());
        }
Ejemplo n.º 9
0
 public override object Quote(Core.ScriptContext context, object strobj, PDOParamType param_type)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 10
0
        /// <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;
            }
        }
Ejemplo n.º 11
0
 public override object Quote(Core.ScriptContext context, object strobj, PDOParamType param_type)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 12
0
        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;
        }